diff --git a/export/341/api.yaml b/export/341/api.yaml
new file mode 100644
index 0000000..7f54bbf
--- /dev/null
+++ b/export/341/api.yaml
@@ -0,0 +1,40030 @@
+openapi: 3.0.3
+info:
+  title: InvenTree API
+  version: '341'
+  description: API for InvenTree - the intuitive open source inventory management
+    system
+  license:
+    name: MIT
+    url: https://github.com/inventree/InvenTree/blob/master/LICENSE
+paths:
+  /api/:
+    get:
+      operationId: root_retrieve
+      description: Serve current server information.
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/InfoApi'
+          description: InvenTree server information
+  /api/action/:
+    post:
+      operationId: action_create
+      description: This function checks if all required info was submitted and then
+        performs a plugin_action or returns an error.
+      tags:
+      - action
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ActionPlugin'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ActionPlugin'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ActionPlugin'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ActionPlugin'
+          description: ''
+  /api/admin/config/:
+    get:
+      operationId: admin_config_list
+      description: List view for all accessed configurations.
+      tags:
+      - admin
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:superuser
+      responses:
+        '200':
+          description: No response body
+  /api/admin/config/{key}/:
+    get:
+      operationId: admin_config_retrieve
+      description: Detail view for an individual configuration.
+      parameters:
+      - in: path
+        name: key
+        schema:
+          type: string
+        required: true
+      tags:
+      - admin
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:superuser
+      responses:
+        '200':
+          description: No response body
+  /api/attachment/:
+    get:
+      operationId: attachment_list
+      description: List API endpoint for Attachment objects.
+      parameters:
+      - in: query
+        name: is_file
+        schema:
+          type: boolean
+        description: Is File
+      - in: query
+        name: is_link
+        schema:
+          type: boolean
+        description: Is Link
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: model_id
+        schema:
+          type: integer
+      - in: query
+        name: model_type
+        schema:
+          type: string
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: upload_user
+        schema:
+          type: integer
+      tags:
+      - attachment
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedAttachmentList'
+          description: ''
+    post:
+      operationId: attachment_create
+      description: List API endpoint for Attachment objects.
+      tags:
+      - attachment
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Attachment'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Attachment'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Attachment'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Attachment'
+          description: ''
+    delete:
+      operationId: attachment_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - attachment
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/attachment/{id}/:
+    get:
+      operationId: attachment_retrieve
+      description: Detail API endpoint for Attachment objects.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - attachment
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Attachment'
+          description: ''
+    put:
+      operationId: attachment_update
+      description: Detail API endpoint for Attachment objects.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - attachment
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Attachment'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Attachment'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Attachment'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Attachment'
+          description: ''
+    patch:
+      operationId: attachment_partial_update
+      description: Detail API endpoint for Attachment objects.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - attachment
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedAttachment'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedAttachment'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedAttachment'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Attachment'
+          description: ''
+    delete:
+      operationId: attachment_destroy
+      description: Detail API endpoint for Attachment objects.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - attachment
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+  /api/attachment/{id}/metadata/:
+    get:
+      operationId: attachment_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - attachment
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: attachment_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - attachment
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: attachment_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - attachment
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/background-task/:
+    get:
+      operationId: background_task_retrieve
+      description: Return information about the current status of the background task
+        queue.
+      tags:
+      - background-task
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          description: No response body
+  /api/background-task/failed/:
+    get:
+      operationId: background_task_failed_list
+      description: Provides a read-only list of currently failed tasks.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - background-task
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedFailedTaskList'
+          description: ''
+    delete:
+      operationId: background_task_failed_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - background-task
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/background-task/pending/:
+    get:
+      operationId: background_task_pending_list
+      description: Provides a read-only list of currently pending tasks.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      tags:
+      - background-task
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPendingTaskList'
+          description: ''
+    delete:
+      operationId: background_task_pending_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - background-task
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/background-task/scheduled/:
+    get:
+      operationId: background_task_scheduled_list
+      description: Provides a read-only list of currently scheduled tasks.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - background-task
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedScheduledTaskList'
+          description: ''
+  /api/barcode/:
+    post:
+      operationId: barcode_create
+      description: |-
+        Endpoint for handling generic barcode scan requests.
+
+        Barcode data are decoded by the client application,
+        and sent to this endpoint (as a JSON object) for validation.
+
+        A barcode could follow the internal InvenTree barcode format,
+        or it could match to a third-party barcode format (e.g. Digikey).
+      tags:
+      - barcode
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Barcode'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Barcode'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Barcode'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Barcode'
+          description: ''
+  /api/barcode/generate/:
+    post:
+      operationId: barcode_generate_create
+      description: |-
+        Endpoint for generating a barcode for a database object.
+
+        The barcode is generated by the selected barcode plugin.
+      tags:
+      - barcode
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BarcodeGenerate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BarcodeGenerate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BarcodeGenerate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Barcode'
+          description: ''
+  /api/barcode/history/:
+    get:
+      operationId: barcode_history_list
+      description: List API endpoint for BarcodeScan objects.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: result
+        schema:
+          type: boolean
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: user
+        schema:
+          type: integer
+      tags:
+      - barcode
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedBarcodeScanResultList'
+          description: ''
+    delete:
+      operationId: barcode_history_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - barcode
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/barcode/history/{id}/:
+    get:
+      operationId: barcode_history_retrieve
+      description: Detail endpoint for a BarcodeScan object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - barcode
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BarcodeScanResult'
+          description: ''
+    delete:
+      operationId: barcode_history_destroy
+      description: Detail endpoint for a BarcodeScan object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - barcode
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+  /api/barcode/link/:
+    post:
+      operationId: barcode_link_create
+      description: |-
+        Endpoint for assigning a barcode to a stock item.
+
+        - This only works if the barcode is not already associated with an object in the database
+        - If the barcode does not match an object, then the barcode hash is assigned to the StockItem
+      tags:
+      - barcode
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BarcodeAssign'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BarcodeAssign'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BarcodeAssign'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BarcodeAssign'
+          description: ''
+  /api/barcode/po-allocate/:
+    post:
+      operationId: barcode_po_allocate_create
+      description: |-
+        Endpoint for allocating parts to a purchase order by scanning their barcode.
+
+        Note that the scanned barcode may point to:
+
+        - A Part object
+        - A ManufacturerPart object
+        - A SupplierPart object
+      tags:
+      - barcode
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BarcodePOAllocate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BarcodePOAllocate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BarcodePOAllocate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BarcodePOAllocate'
+          description: ''
+  /api/barcode/po-receive/:
+    post:
+      operationId: barcode_po_receive_create
+      description: |-
+        Endpoint for handling receiving parts by scanning their barcode.
+
+        Barcode data are decoded by the client application,
+        and sent to this endpoint (as a JSON object) for validation.
+
+        The barcode should follow a third-party barcode format (e.g. Digikey)
+        and ideally contain order_number and quantity information.
+
+        The following parameters are available:
+
+        - barcode: The raw barcode data (required)
+        - purchase_order: The purchase order containing the item to receive (optional)
+        - location: The destination location for the received item (optional)
+      tags:
+      - barcode
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BarcodePOReceive'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BarcodePOReceive'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BarcodePOReceive'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BarcodePOReceive'
+          description: ''
+  /api/barcode/so-allocate/:
+    post:
+      operationId: barcode_so_allocate_create
+      description: |-
+        Endpoint for allocating stock to a sales order, by scanning barcode.
+
+        The scanned barcode should map to a StockItem object.
+
+        Additional fields can be passed to the endpoint:
+
+        - SalesOrder (Required)
+        - Line Item
+        - Shipment
+        - Quantity
+      tags:
+      - barcode
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BarcodeSOAllocate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BarcodeSOAllocate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BarcodeSOAllocate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BarcodeSOAllocate'
+          description: ''
+  /api/barcode/unlink/:
+    post:
+      operationId: barcode_unlink_create
+      description: Endpoint for unlinking / unassigning a custom barcode from a database
+        object.
+      tags:
+      - barcode
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BarcodeUnassign'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BarcodeUnassign'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BarcodeUnassign'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BarcodeUnassign'
+          description: ''
+  /api/bom/:
+    get:
+      operationId: bom_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: allow_variants
+        schema:
+          type: boolean
+      - in: query
+        name: available_stock
+        schema:
+          type: boolean
+        description: Has available stock
+      - in: query
+        name: consumable
+        schema:
+          type: boolean
+      - in: query
+        name: has_pricing
+        schema:
+          type: boolean
+        description: Has Pricing
+      - in: query
+        name: inherited
+        schema:
+          type: boolean
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - in: query
+        name: on_order
+        schema:
+          type: boolean
+        description: On order
+      - in: query
+        name: optional
+        schema:
+          type: boolean
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+        description: Part
+      - in: query
+        name: part_active
+        schema:
+          type: boolean
+        description: Assembly part is active
+      - in: query
+        name: part_testable
+        schema:
+          type: boolean
+        description: Assembly part is testable
+      - in: query
+        name: part_trackable
+        schema:
+          type: boolean
+        description: Assembly part is trackable
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: sub_part_assembly
+        schema:
+          type: boolean
+        description: Component part is an assembly
+      - in: query
+        name: sub_part_testable
+        schema:
+          type: boolean
+        description: Component part is testable
+      - in: query
+        name: sub_part_trackable
+        schema:
+          type: boolean
+        description: Component part is trackable
+      - in: query
+        name: uses
+        schema:
+          type: integer
+      - in: query
+        name: validated
+        schema:
+          type: boolean
+      tags:
+      - bom
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedBomItemList'
+          description: ''
+    post:
+      operationId: bom_create
+      description: |-
+        API endpoint for accessing a list of BomItem objects.
+
+        - GET: Return list of BomItem objects
+        - POST: Create a new BomItem object
+      tags:
+      - bom
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BomItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BomItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BomItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part
+        - r:add:build
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BomItem'
+          description: ''
+    delete:
+      operationId: bom_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - bom
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+        - r:delete:build
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/bom/{id}/:
+    get:
+      operationId: bom_retrieve
+      description: API endpoint for detail view of a single BomItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BomItem'
+          description: ''
+    put:
+      operationId: bom_update
+      description: API endpoint for detail view of a single BomItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BomItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BomItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BomItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BomItem'
+          description: ''
+    patch:
+      operationId: bom_partial_update
+      description: API endpoint for detail view of a single BomItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedBomItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedBomItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedBomItem'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BomItem'
+          description: ''
+    delete:
+      operationId: bom_destroy
+      description: API endpoint for detail view of a single BomItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+        - r:delete:build
+      responses:
+        '204':
+          description: No response body
+  /api/bom/{id}/metadata/:
+    get:
+      operationId: bom_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: bom_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: bom_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/bom/{id}/validate/:
+    put:
+      operationId: bom_validate_update
+      description: API endpoint for validating a BomItem.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BomItemValidation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BomItemValidation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BomItemValidation'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BomItemValidation'
+          description: ''
+    patch:
+      operationId: bom_validate_partial_update
+      description: API endpoint for validating a BomItem.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedBomItemValidation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedBomItemValidation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedBomItemValidation'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BomItemValidation'
+          description: ''
+  /api/bom/substitute/:
+    get:
+      operationId: bom_substitute_list
+      description: API endpoint for accessing a list of BomItemSubstitute objects.
+      parameters:
+      - in: query
+        name: bom_item
+        schema:
+          type: integer
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - bom
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedBomItemSubstituteList'
+          description: ''
+    post:
+      operationId: bom_substitute_create
+      description: API endpoint for accessing a list of BomItemSubstitute objects.
+      tags:
+      - bom
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BomItemSubstitute'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BomItemSubstitute'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BomItemSubstitute'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part
+        - r:add:build
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BomItemSubstitute'
+          description: ''
+  /api/bom/substitute/{id}/:
+    get:
+      operationId: bom_substitute_retrieve
+      description: API endpoint for detail view of a single BomItemSubstitute object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BomItemSubstitute'
+          description: ''
+    put:
+      operationId: bom_substitute_update
+      description: API endpoint for detail view of a single BomItemSubstitute object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BomItemSubstitute'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BomItemSubstitute'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BomItemSubstitute'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BomItemSubstitute'
+          description: ''
+    patch:
+      operationId: bom_substitute_partial_update
+      description: API endpoint for detail view of a single BomItemSubstitute object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedBomItemSubstitute'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedBomItemSubstitute'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedBomItemSubstitute'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BomItemSubstitute'
+          description: ''
+    delete:
+      operationId: bom_substitute_destroy
+      description: API endpoint for detail view of a single BomItemSubstitute object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+        - r:delete:build
+      responses:
+        '204':
+          description: No response body
+  /api/bom/substitute/{id}/metadata/:
+    get:
+      operationId: bom_substitute_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: bom_substitute_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: bom_substitute_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - bom
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/build/:
+    get:
+      operationId: build_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: active
+        schema:
+          type: boolean
+        description: Build is active
+      - in: query
+        name: ancestor
+        schema:
+          type: integer
+        description: Ancestor Build
+      - in: query
+        name: assigned_to
+        schema:
+          type: integer
+        description: Assigned To
+      - in: query
+        name: assigned_to_me
+        schema:
+          type: boolean
+        description: Assigned to me
+      - in: query
+        name: category
+        schema:
+          type: integer
+        description: Category
+      - in: query
+        name: completed_after
+        schema:
+          type: string
+          format: date
+        description: Completed after
+      - in: query
+        name: completed_before
+        schema:
+          type: string
+          format: date
+        description: Completed before
+      - in: query
+        name: created_after
+        schema:
+          type: string
+          format: date
+        description: Created after
+      - in: query
+        name: created_before
+        schema:
+          type: string
+          format: date
+        description: Created before
+      - in: query
+        name: exclude_tree
+        schema:
+          type: integer
+        description: Exclude Tree
+      - in: query
+        name: has_project_code
+        schema:
+          type: boolean
+        description: has_project_code
+      - in: query
+        name: has_start_date
+        schema:
+          type: boolean
+        description: Has start date
+      - in: query
+        name: has_target_date
+        schema:
+          type: boolean
+        description: Has target date
+      - in: query
+        name: include_variants
+        schema:
+          type: boolean
+        description: Include Variants
+      - in: query
+        name: issued_by
+        schema:
+          type: integer
+        description: Issued By
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: max_date
+        schema:
+          type: string
+          format: date
+        description: Max Date
+      - in: query
+        name: min_date
+        schema:
+          type: string
+          format: date
+        description: Min Date
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: outstanding
+        schema:
+          type: boolean
+        description: Build is outstanding
+      - in: query
+        name: overdue
+        schema:
+          type: boolean
+        description: Build is overdue
+      - in: query
+        name: parent
+        schema:
+          type: integer
+        description: Parent Build
+      - in: query
+        name: part
+        schema:
+          type: integer
+        description: Part
+      - in: query
+        name: project_code
+        schema:
+          type: integer
+      - in: query
+        name: reference
+        schema:
+          type: string
+        description: Filter by exact reference
+      - in: query
+        name: sales_order
+        schema:
+          type: integer
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: start_date_after
+        schema:
+          type: string
+          format: date
+        description: Start date after
+      - in: query
+        name: start_date_before
+        schema:
+          type: string
+          format: date
+        description: Start date before
+      - in: query
+        name: status
+        schema:
+          type: integer
+        description: Order Status
+      - in: query
+        name: target_date_after
+        schema:
+          type: string
+          format: date
+        description: Target date after
+      - in: query
+        name: target_date_before
+        schema:
+          type: string
+          format: date
+        description: Target date before
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedBuildList'
+          description: ''
+    post:
+      operationId: build_create
+      description: |-
+        API endpoint for accessing a list of Build objects.
+
+        - GET: Return list of objects (with filters)
+        - POST: Create a new Build object
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Build'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Build'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Build'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:build
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Build'
+          description: ''
+  /api/build/{id}/:
+    get:
+      operationId: build_retrieve
+      description: API endpoint for detail view of a Build object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Build'
+          description: ''
+    put:
+      operationId: build_update
+      description: API endpoint for detail view of a Build object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Build'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Build'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Build'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Build'
+          description: ''
+    patch:
+      operationId: build_partial_update
+      description: API endpoint for detail view of a Build object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedBuild'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedBuild'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedBuild'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Build'
+          description: ''
+    delete:
+      operationId: build_destroy
+      description: API endpoint for detail view of a Build object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:build
+      responses:
+        '204':
+          description: No response body
+  /api/build/{id}/allocate/:
+    post:
+      operationId: build_allocate_create
+      description: |-
+        API endpoint to allocate stock items to a build order.
+
+        - The BuildOrder object is specified by the URL
+        - Items to allocate are specified as a list called "items" with the following options:
+            - bom_item: pk value of a given BomItem object (must match the part associated with this build)
+            - stock_item: pk value of a given StockItem object
+            - quantity: quantity to allocate
+            - output: StockItem (build order output) to allocate stock against (optional)
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BuildAllocation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BuildAllocation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BuildAllocation'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildAllocation'
+          description: ''
+  /api/build/{id}/auto-allocate/:
+    post:
+      operationId: build_auto_allocate_create
+      description: |-
+        API endpoint for 'automatically' allocating stock against a build order.
+
+        - Only looks at 'untracked' parts
+        - If stock exists in a single location, easy!
+        - If user decides that stock items are "fungible", allocate against multiple stock items
+        - If the user wants to, allocate substite parts if the primary parts are not available.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BuildAutoAllocation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BuildAutoAllocation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BuildAutoAllocation'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildAutoAllocation'
+          description: ''
+  /api/build/{id}/cancel/:
+    post:
+      operationId: build_cancel_create
+      description: API endpoint for cancelling a BuildOrder.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BuildCancel'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BuildCancel'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BuildCancel'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildCancel'
+          description: ''
+  /api/build/{id}/complete/:
+    post:
+      operationId: build_complete_create
+      description: API endpoint for completing build outputs.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BuildOutputComplete'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BuildOutputComplete'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BuildOutputComplete'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildOutputComplete'
+          description: ''
+  /api/build/{id}/create-output/:
+    post:
+      operationId: build_create_output_create
+      description: API endpoint for creating new build output(s).
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BuildOutputCreate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BuildOutputCreate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BuildOutputCreate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildOutputCreate'
+          description: ''
+  /api/build/{id}/delete-outputs/:
+    post:
+      operationId: build_delete_outputs_create
+      description: API endpoint for deleting multiple build outputs.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BuildOutputDelete'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BuildOutputDelete'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BuildOutputDelete'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildOutputDelete'
+          description: ''
+  /api/build/{id}/finish/:
+    post:
+      operationId: build_finish_create
+      description: API endpoint for marking a build as finished (completed).
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BuildComplete'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BuildComplete'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BuildComplete'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildComplete'
+          description: ''
+  /api/build/{id}/hold/:
+    post:
+      operationId: build_hold_create
+      description: API endpoint for placing a BuildOrder on hold.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          description: No response body
+  /api/build/{id}/issue/:
+    post:
+      operationId: build_issue_create
+      description: API endpoint for issuing a BuildOrder.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          description: No response body
+  /api/build/{id}/metadata/:
+    get:
+      operationId: build_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: build_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: build_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/build/{id}/scrap-outputs/:
+    post:
+      operationId: build_scrap_outputs_create
+      description: API endpoint for scrapping build output(s).
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BuildOutputScrap'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BuildOutputScrap'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BuildOutputScrap'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildOutputScrap'
+          description: ''
+  /api/build/{id}/unallocate/:
+    post:
+      operationId: build_unallocate_create
+      description: |-
+        API endpoint for unallocating stock items from a build order.
+
+        - The BuildOrder object is specified by the URL
+        - "output" (StockItem) can optionally be specified
+        - "bom_item" can optionally be specified
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BuildUnallocation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BuildUnallocation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BuildUnallocation'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildUnallocation'
+          description: ''
+  /api/build/item/:
+    get:
+      operationId: build_item_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: build
+        schema:
+          type: integer
+        description: Build Order
+      - in: query
+        name: build_line
+        schema:
+          type: integer
+      - in: query
+        name: include_variants
+        schema:
+          type: boolean
+        description: Include Variants
+      - in: query
+        name: install_into
+        schema:
+          type: integer
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+        description: Part
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: stock_item
+        schema:
+          type: integer
+      - in: query
+        name: tracked
+        schema:
+          type: boolean
+        description: Tracked
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedBuildItemList'
+          description: ''
+    post:
+      operationId: build_item_create
+      description: |-
+        API endpoint for accessing a list of BuildItem objects.
+
+        - GET: Return list of objects
+        - POST: Create a new BuildItem object
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BuildItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BuildItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BuildItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:build
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildItem'
+          description: ''
+    delete:
+      operationId: build_item_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:build
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/build/item/{id}/:
+    get:
+      operationId: build_item_retrieve
+      description: API endpoint for detail view of a BuildItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildItem'
+          description: ''
+    put:
+      operationId: build_item_update
+      description: API endpoint for detail view of a BuildItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BuildItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BuildItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BuildItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildItem'
+          description: ''
+    patch:
+      operationId: build_item_partial_update
+      description: API endpoint for detail view of a BuildItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedBuildItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedBuildItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedBuildItem'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildItem'
+          description: ''
+    delete:
+      operationId: build_item_destroy
+      description: API endpoint for detail view of a BuildItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:build
+      responses:
+        '204':
+          description: No response body
+  /api/build/item/{id}/metadata/:
+    get:
+      operationId: build_item_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: build_item_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: build_item_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/build/line/:
+    get:
+      operationId: build_line_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: allocated
+        schema:
+          type: boolean
+        description: Allocated
+      - in: query
+        name: assembly
+        schema:
+          type: boolean
+        description: Assembly
+      - in: query
+        name: available
+        schema:
+          type: boolean
+        description: Available
+      - in: query
+        name: bom_item
+        schema:
+          type: integer
+      - in: query
+        name: build
+        schema:
+          type: integer
+      - in: query
+        name: consumable
+        schema:
+          type: boolean
+        description: Consumable
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - in: query
+        name: optional
+        schema:
+          type: boolean
+        description: Optional
+      - in: query
+        name: order_outstanding
+        schema:
+          type: boolean
+        description: Order Outstanding
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+        description: Part
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: testable
+        schema:
+          type: boolean
+        description: Testable
+      - in: query
+        name: tracked
+        schema:
+          type: boolean
+        description: Tracked
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedBuildLineList'
+          description: ''
+    post:
+      operationId: build_line_create
+      description: API endpoint for accessing a list of BuildLine objects.
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BuildLine'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BuildLine'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BuildLine'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:build
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildLine'
+          description: ''
+  /api/build/line/{id}/:
+    get:
+      operationId: build_line_retrieve
+      description: API endpoint for detail view of a BuildLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildLine'
+          description: ''
+    put:
+      operationId: build_line_update
+      description: API endpoint for detail view of a BuildLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BuildLine'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BuildLine'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BuildLine'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildLine'
+          description: ''
+    patch:
+      operationId: build_line_partial_update
+      description: API endpoint for detail view of a BuildLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedBuildLine'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedBuildLine'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedBuildLine'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BuildLine'
+          description: ''
+    delete:
+      operationId: build_line_destroy
+      description: API endpoint for detail view of a BuildLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:build
+      responses:
+        '204':
+          description: No response body
+  /api/build/status/:
+    get:
+      operationId: build_status_retrieve
+      description: Retrieve information about a specific status code
+      tags:
+      - build
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GenericStateClass'
+          description: ''
+        '400':
+          description: Invalid request
+  /api/company/:
+    get:
+      operationId: company_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: active
+        schema:
+          type: boolean
+      - in: query
+        name: is_customer
+        schema:
+          type: boolean
+      - in: query
+        name: is_manufacturer
+        schema:
+          type: boolean
+      - in: query
+        name: is_supplier
+        schema:
+          type: boolean
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: name
+        schema:
+          type: string
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+        - r:view:sales_order
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedCompanyList'
+          description: ''
+    post:
+      operationId: company_create
+      description: |-
+        API endpoint for accessing a list of Company objects.
+
+        Provides two methods:
+
+        - GET: Return list of objects
+        - POST: Create a new Company object
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Company'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Company'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Company'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:purchase_order
+        - r:add:sales_order
+        - r:add:return_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Company'
+          description: ''
+  /api/company/{id}/:
+    get:
+      operationId: company_retrieve
+      description: API endpoint for detail of a single Company object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+        - r:view:sales_order
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Company'
+          description: ''
+    put:
+      operationId: company_update
+      description: API endpoint for detail of a single Company object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Company'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Company'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Company'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+        - r:change:sales_order
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Company'
+          description: ''
+    patch:
+      operationId: company_partial_update
+      description: API endpoint for detail of a single Company object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedCompany'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedCompany'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedCompany'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+        - r:change:sales_order
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Company'
+          description: ''
+    delete:
+      operationId: company_destroy
+      description: API endpoint for detail of a single Company object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:purchase_order
+        - r:delete:sales_order
+        - r:delete:return_order
+      responses:
+        '204':
+          description: No response body
+  /api/company/{id}/metadata/:
+    get:
+      operationId: company_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+        - r:view:sales_order
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: company_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+        - r:change:sales_order
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: company_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+        - r:change:sales_order
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/company/address/:
+    get:
+      operationId: company_address_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: company
+        schema:
+          type: integer
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+        - r:view:sales_order
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedAddressList'
+          description: ''
+    post:
+      operationId: company_address_create
+      description: API endpoint for list view of Address model.
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Address'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Address'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Address'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:purchase_order
+        - r:add:sales_order
+        - r:add:return_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Address'
+          description: ''
+    delete:
+      operationId: company_address_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:purchase_order
+        - r:delete:sales_order
+        - r:delete:return_order
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/company/address/{id}/:
+    get:
+      operationId: company_address_retrieve
+      description: API endpoint for a single Address object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+        - r:view:sales_order
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Address'
+          description: ''
+    put:
+      operationId: company_address_update
+      description: API endpoint for a single Address object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Address'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Address'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Address'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+        - r:change:sales_order
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Address'
+          description: ''
+    patch:
+      operationId: company_address_partial_update
+      description: API endpoint for a single Address object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedAddress'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedAddress'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedAddress'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+        - r:change:sales_order
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Address'
+          description: ''
+    delete:
+      operationId: company_address_destroy
+      description: API endpoint for a single Address object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:purchase_order
+        - r:delete:sales_order
+        - r:delete:return_order
+      responses:
+        '204':
+          description: No response body
+  /api/company/contact/:
+    get:
+      operationId: company_contact_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: company
+        schema:
+          type: integer
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+        - r:view:sales_order
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedContactList'
+          description: ''
+    post:
+      operationId: company_contact_create
+      description: API endpoint for list view of Company model.
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Contact'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Contact'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Contact'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:purchase_order
+        - r:add:sales_order
+        - r:add:return_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Contact'
+          description: ''
+    delete:
+      operationId: company_contact_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:purchase_order
+        - r:delete:sales_order
+        - r:delete:return_order
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/company/contact/{id}/:
+    get:
+      operationId: company_contact_retrieve
+      description: Detail endpoint for Company model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+        - r:view:sales_order
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Contact'
+          description: ''
+    put:
+      operationId: company_contact_update
+      description: Detail endpoint for Company model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Contact'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Contact'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Contact'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+        - r:change:sales_order
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Contact'
+          description: ''
+    patch:
+      operationId: company_contact_partial_update
+      description: Detail endpoint for Company model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedContact'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedContact'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedContact'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+        - r:change:sales_order
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Contact'
+          description: ''
+    delete:
+      operationId: company_contact_destroy
+      description: Detail endpoint for Company model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:purchase_order
+        - r:delete:sales_order
+        - r:delete:return_order
+      responses:
+        '204':
+          description: No response body
+  /api/company/contact/{id}/metadata/:
+    get:
+      operationId: company_contact_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+        - r:view:sales_order
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: company_contact_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+        - r:change:sales_order
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: company_contact_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+        - r:change:sales_order
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/company/part/:
+    get:
+      operationId: company_part_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: MPN
+        schema:
+          type: string
+        description: Manufacturer Part Number
+      - in: query
+        name: SKU
+        schema:
+          type: string
+      - in: query
+        name: active
+        schema:
+          type: boolean
+        description: Supplier Part is Active
+      - in: query
+        name: company
+        schema:
+          type: integer
+        description: Company
+      - in: query
+        name: has_stock
+        schema:
+          type: boolean
+        description: Has Stock
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: manufacturer
+        schema:
+          type: integer
+        description: Manufacturer
+      - in: query
+        name: manufacturer_part
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+      - in: query
+        name: part_active
+        schema:
+          type: boolean
+        description: Internal Part is Active
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: supplier
+        schema:
+          type: integer
+      - in: query
+        name: supplier_active
+        schema:
+          type: boolean
+        description: Supplier is Active
+      - in: query
+        name: tags__name
+        schema:
+          type: string
+      - in: query
+        name: tags__slug
+        schema:
+          type: string
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedSupplierPartList'
+          description: ''
+    post:
+      operationId: company_part_create
+      description: |-
+        API endpoint for list view of SupplierPart object.
+
+        - GET: Return list of SupplierPart objects
+        - POST: Create a new SupplierPart object
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SupplierPart'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SupplierPart'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SupplierPart'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part
+        - r:add:purchase_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SupplierPart'
+          description: ''
+    delete:
+      operationId: company_part_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+        - r:delete:purchase_order
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/company/part/{id}/:
+    get:
+      operationId: company_part_retrieve
+      description: |-
+        API endpoint for detail view of SupplierPart object.
+
+        - GET: Retrieve detail view
+        - PATCH: Update object
+        - DELETE: Delete object
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SupplierPart'
+          description: ''
+    put:
+      operationId: company_part_update
+      description: |-
+        API endpoint for detail view of SupplierPart object.
+
+        - GET: Retrieve detail view
+        - PATCH: Update object
+        - DELETE: Delete object
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SupplierPart'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SupplierPart'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SupplierPart'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SupplierPart'
+          description: ''
+    patch:
+      operationId: company_part_partial_update
+      description: |-
+        API endpoint for detail view of SupplierPart object.
+
+        - GET: Retrieve detail view
+        - PATCH: Update object
+        - DELETE: Delete object
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedSupplierPart'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedSupplierPart'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedSupplierPart'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SupplierPart'
+          description: ''
+    delete:
+      operationId: company_part_destroy
+      description: |-
+        API endpoint for detail view of SupplierPart object.
+
+        - GET: Retrieve detail view
+        - PATCH: Update object
+        - DELETE: Delete object
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+        - r:delete:purchase_order
+      responses:
+        '204':
+          description: No response body
+  /api/company/part/{id}/metadata/:
+    get:
+      operationId: company_part_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: company_part_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: company_part_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/company/part/manufacturer/:
+    get:
+      operationId: company_part_manufacturer_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: MPN
+        schema:
+          type: string
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: manufacturer
+        schema:
+          type: integer
+      - in: query
+        name: manufacturer_active
+        schema:
+          type: boolean
+        description: Manufacturer is Active
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+      - in: query
+        name: part_active
+        schema:
+          type: boolean
+        description: Part is Active
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: tags__name
+        schema:
+          type: string
+      - in: query
+        name: tags__slug
+        schema:
+          type: string
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManufacturerPartList'
+          description: ''
+    post:
+      operationId: company_part_manufacturer_create
+      description: |-
+        API endpoint for list view of ManufacturerPart object.
+
+        - GET: Return list of ManufacturerPart objects
+        - POST: Create a new ManufacturerPart object
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManufacturerPart'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManufacturerPart'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManufacturerPart'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part
+        - r:add:purchase_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManufacturerPart'
+          description: ''
+    delete:
+      operationId: company_part_manufacturer_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+        - r:delete:purchase_order
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/company/part/manufacturer/{id}/:
+    get:
+      operationId: company_part_manufacturer_retrieve
+      description: |-
+        API endpoint for detail view of ManufacturerPart object.
+
+        - GET: Retrieve detail view
+        - PATCH: Update object
+        - DELETE: Delete object
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManufacturerPart'
+          description: ''
+    put:
+      operationId: company_part_manufacturer_update
+      description: |-
+        API endpoint for detail view of ManufacturerPart object.
+
+        - GET: Retrieve detail view
+        - PATCH: Update object
+        - DELETE: Delete object
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManufacturerPart'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManufacturerPart'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManufacturerPart'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManufacturerPart'
+          description: ''
+    patch:
+      operationId: company_part_manufacturer_partial_update
+      description: |-
+        API endpoint for detail view of ManufacturerPart object.
+
+        - GET: Retrieve detail view
+        - PATCH: Update object
+        - DELETE: Delete object
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedManufacturerPart'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedManufacturerPart'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedManufacturerPart'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManufacturerPart'
+          description: ''
+    delete:
+      operationId: company_part_manufacturer_destroy
+      description: |-
+        API endpoint for detail view of ManufacturerPart object.
+
+        - GET: Retrieve detail view
+        - PATCH: Update object
+        - DELETE: Delete object
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+        - r:delete:purchase_order
+      responses:
+        '204':
+          description: No response body
+  /api/company/part/manufacturer/{id}/metadata/:
+    get:
+      operationId: company_part_manufacturer_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: company_part_manufacturer_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: company_part_manufacturer_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/company/part/manufacturer/parameter/:
+    get:
+      operationId: company_part_manufacturer_parameter_list
+      description: API endpoint for list view of ManufacturerPartParamater model.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: manufacturer
+        schema:
+          type: integer
+      - in: query
+        name: manufacturer_part
+        schema:
+          type: integer
+      - in: query
+        name: name
+        schema:
+          type: string
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: units
+        schema:
+          type: string
+      - in: query
+        name: value
+        schema:
+          type: string
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManufacturerPartParameterList'
+          description: ''
+    post:
+      operationId: company_part_manufacturer_parameter_create
+      description: API endpoint for list view of ManufacturerPartParamater model.
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManufacturerPartParameter'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManufacturerPartParameter'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManufacturerPartParameter'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part
+        - r:add:purchase_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManufacturerPartParameter'
+          description: ''
+    delete:
+      operationId: company_part_manufacturer_parameter_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+        - r:delete:purchase_order
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/company/part/manufacturer/parameter/{id}/:
+    get:
+      operationId: company_part_manufacturer_parameter_retrieve
+      description: API endpoint for detail view of ManufacturerPartParameter model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManufacturerPartParameter'
+          description: ''
+    put:
+      operationId: company_part_manufacturer_parameter_update
+      description: API endpoint for detail view of ManufacturerPartParameter model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManufacturerPartParameter'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManufacturerPartParameter'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManufacturerPartParameter'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManufacturerPartParameter'
+          description: ''
+    patch:
+      operationId: company_part_manufacturer_parameter_partial_update
+      description: API endpoint for detail view of ManufacturerPartParameter model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedManufacturerPartParameter'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedManufacturerPartParameter'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedManufacturerPartParameter'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManufacturerPartParameter'
+          description: ''
+    delete:
+      operationId: company_part_manufacturer_parameter_destroy
+      description: API endpoint for detail view of ManufacturerPartParameter model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+        - r:delete:purchase_order
+      responses:
+        '204':
+          description: No response body
+  /api/company/price-break/:
+    get:
+      operationId: company_price_break_list
+      description: |-
+        API endpoint for list view of SupplierPriceBreak object.
+
+        - GET: Retrieve list of SupplierPriceBreak objects
+        - POST: Create a new SupplierPriceBreak object
+      parameters:
+      - in: query
+        name: base_part
+        schema:
+          type: integer
+        description: Base Part
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+      - in: query
+        name: quantity
+        schema:
+          type: number
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: supplier
+        schema:
+          type: integer
+        description: Supplier
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedSupplierPriceBreakList'
+          description: ''
+    post:
+      operationId: company_price_break_create
+      description: |-
+        API endpoint for list view of SupplierPriceBreak object.
+
+        - GET: Retrieve list of SupplierPriceBreak objects
+        - POST: Create a new SupplierPriceBreak object
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SupplierPriceBreak'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SupplierPriceBreak'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SupplierPriceBreak'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:purchase_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SupplierPriceBreak'
+          description: ''
+  /api/company/price-break/{id}/:
+    get:
+      operationId: company_price_break_retrieve
+      description: Detail endpoint for SupplierPriceBreak object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SupplierPriceBreak'
+          description: ''
+    put:
+      operationId: company_price_break_update
+      description: Detail endpoint for SupplierPriceBreak object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SupplierPriceBreak'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SupplierPriceBreak'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SupplierPriceBreak'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SupplierPriceBreak'
+          description: ''
+    patch:
+      operationId: company_price_break_partial_update
+      description: Detail endpoint for SupplierPriceBreak object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedSupplierPriceBreak'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedSupplierPriceBreak'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedSupplierPriceBreak'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SupplierPriceBreak'
+          description: ''
+    delete:
+      operationId: company_price_break_destroy
+      description: Detail endpoint for SupplierPriceBreak object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - company
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:purchase_order
+      responses:
+        '204':
+          description: No response body
+  /api/contenttype/:
+    get:
+      operationId: contenttype_list
+      description: List view for ContentTypes.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - contenttype
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedContentTypeList'
+          description: ''
+  /api/contenttype/{id}/:
+    get:
+      operationId: contenttype_retrieve
+      description: Detail view for a ContentType model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - contenttype
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ContentType'
+          description: ''
+  /api/contenttype/model/{model}/:
+    get:
+      operationId: contenttype_retrieve_model
+      description: Detail view for a ContentType model.
+      parameters:
+      - in: path
+        name: model
+        schema:
+          type: string
+        required: true
+      tags:
+      - contenttype
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ContentType'
+          description: ''
+  /api/currency/exchange/:
+    get:
+      operationId: currency_exchange_retrieve
+      description: Return information on available currency conversions.
+      tags:
+      - currency
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CurrencyExchange'
+          description: ''
+  /api/currency/refresh/:
+    post:
+      operationId: currency_refresh_create
+      description: Performing a POST request will update currency exchange rates.
+      tags:
+      - currency
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          description: No response body
+  /api/data-output/:
+    get:
+      operationId: data_output_list
+      description: List view for DataOutput objects.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - data-output
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedDataOutputList'
+          description: ''
+    delete:
+      operationId: data_output_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - data-output
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/data-output/{id}/:
+    get:
+      operationId: data_output_retrieve
+      description: Detail view for a DataOutput object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - data-output
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataOutput'
+          description: ''
+  /api/email/generate/:
+    post:
+      operationId: email_generate_create
+      description: Get the token for the current user or fail.
+      tags:
+      - email
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/GetSimpleLogin'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/GetSimpleLogin'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/GetSimpleLogin'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GetSimpleLogin'
+          description: ''
+  /api/error-report/:
+    get:
+      operationId: error_report_list
+      description: List view for server error messages.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - error-report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedErrorMessageList'
+          description: ''
+    delete:
+      operationId: error_report_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - error-report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/error-report/{id}/:
+    get:
+      operationId: error_report_retrieve
+      description: Detail view for a single error message.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - error-report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: ''
+    put:
+      operationId: error_report_update
+      description: Detail view for a single error message.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - error-report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ErrorMessage'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ErrorMessage'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ErrorMessage'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: ''
+    patch:
+      operationId: error_report_partial_update
+      description: Detail view for a single error message.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - error-report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedErrorMessage'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedErrorMessage'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedErrorMessage'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ErrorMessage'
+          description: ''
+    delete:
+      operationId: error_report_destroy
+      description: Detail view for a single error message.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - error-report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+  /api/flags/:
+    get:
+      operationId: flags_list
+      description: List view for feature flags.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      tags:
+      - flags
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          description: No response body
+  /api/flags/{key}/:
+    get:
+      operationId: flags_retrieve
+      description: Detail view for an individual feature flag.
+      parameters:
+      - in: path
+        name: key
+        schema:
+          type: string
+        required: true
+      tags:
+      - flags
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          description: No response body
+  /api/generate/batch-code/:
+    post:
+      operationId: generate_batch_code_create
+      description: Generate a new batch code.
+      tags:
+      - generate
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/GenerateBatchCode'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/GenerateBatchCode'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/GenerateBatchCode'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GenerateBatchCode'
+          description: ''
+  /api/generate/serial-number/:
+    post:
+      operationId: generate_serial_number_create
+      description: Generate a new serial number.
+      tags:
+      - generate
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/GenerateSerialNumber'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/GenerateSerialNumber'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/GenerateSerialNumber'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GenerateSerialNumber'
+          description: ''
+  /api/generic/status/:
+    get:
+      operationId: generic_status_retrieve_all
+      description: Perform a GET request to learn information about status codes.
+      tags:
+      - generic
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          description: No response body
+  /api/generic/status/{statusmodel}/:
+    get:
+      operationId: generic_status_retrieve
+      description: Retrieve information about a specific status code
+      parameters:
+      - in: path
+        name: statusmodel
+        schema:
+          type: string
+        required: true
+      tags:
+      - generic
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GenericStateClass'
+          description: ''
+        '400':
+          description: Invalid request
+  /api/generic/status/custom/:
+    get:
+      operationId: generic_status_custom_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: model
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: reference_status
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - generic
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedCustomStateList'
+          description: ''
+    post:
+      operationId: generic_status_custom_create
+      description: List view for all custom states.
+      tags:
+      - generic
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/CustomState'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/CustomState'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/CustomState'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CustomState'
+          description: ''
+  /api/generic/status/custom/{id}/:
+    get:
+      operationId: generic_status_custom_retrieve
+      description: Detail view for a particular custom states.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - generic
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CustomState'
+          description: ''
+    put:
+      operationId: generic_status_custom_update
+      description: Detail view for a particular custom states.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - generic
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/CustomState'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/CustomState'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/CustomState'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CustomState'
+          description: ''
+    patch:
+      operationId: generic_status_custom_partial_update
+      description: Detail view for a particular custom states.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - generic
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedCustomState'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedCustomState'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedCustomState'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CustomState'
+          description: ''
+    delete:
+      operationId: generic_status_custom_destroy
+      description: Detail view for a particular custom states.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - generic
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+  /api/icons/:
+    get:
+      operationId: icons_list
+      description: List view for available icon packages.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      tags:
+      - icons
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedIconPackageList'
+          description: ''
+  /api/importer/column-mapping/:
+    get:
+      operationId: importer_column_mapping_list
+      description: API endpoint for accessing a list of DataImportColumnMap objects.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: session
+        schema:
+          type: integer
+      tags:
+      - importer
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedDataImportColumnMapList'
+          description: ''
+  /api/importer/column-mapping/{id}/:
+    get:
+      operationId: importer_column_mapping_retrieve
+      description: Detail endpoint for a single DataImportColumnMap object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - importer
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataImportColumnMap'
+          description: ''
+    put:
+      operationId: importer_column_mapping_update
+      description: Detail endpoint for a single DataImportColumnMap object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - importer
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/DataImportColumnMap'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/DataImportColumnMap'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/DataImportColumnMap'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataImportColumnMap'
+          description: ''
+    patch:
+      operationId: importer_column_mapping_partial_update
+      description: Detail endpoint for a single DataImportColumnMap object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - importer
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedDataImportColumnMap'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedDataImportColumnMap'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedDataImportColumnMap'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataImportColumnMap'
+          description: ''
+  /api/importer/models/:
+    get:
+      operationId: importer_models_list
+      description: Return a list of models available for import.
+      tags:
+      - importer
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/DataImporterModel'
+          description: ''
+  /api/importer/row/:
+    get:
+      operationId: importer_row_list
+      description: API endpoint for accessing a list of DataImportRow objects.
+      parameters:
+      - in: query
+        name: complete
+        schema:
+          type: boolean
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: session
+        schema:
+          type: integer
+      - in: query
+        name: valid
+        schema:
+          type: boolean
+      tags:
+      - importer
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedDataImportRowList'
+          description: ''
+    delete:
+      operationId: importer_row_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - importer
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/importer/row/{id}/:
+    get:
+      operationId: importer_row_retrieve
+      description: Detail endpoint for a single DataImportRow object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - importer
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataImportRow'
+          description: ''
+    put:
+      operationId: importer_row_update
+      description: Detail endpoint for a single DataImportRow object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - importer
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/DataImportRow'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/DataImportRow'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/DataImportRow'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataImportRow'
+          description: ''
+    patch:
+      operationId: importer_row_partial_update
+      description: Detail endpoint for a single DataImportRow object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - importer
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedDataImportRow'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedDataImportRow'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedDataImportRow'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataImportRow'
+          description: ''
+    delete:
+      operationId: importer_row_destroy
+      description: Detail endpoint for a single DataImportRow object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - importer
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+  /api/importer/session/:
+    get:
+      operationId: importer_session_list
+      description: API endpoint for accessing a list of DataImportSession objects.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: model_type
+        schema:
+          type: string
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: status
+        schema:
+          type: integer
+          enum:
+          - 0
+          - 10
+          - 20
+          - 30
+          - 40
+        description: |-
+          Import status
+
+          * `0` - Initializing
+          * `10` - Mapping Columns
+          * `20` - Importing Data
+          * `30` - Processing Data
+          * `40` - Complete
+      - in: query
+        name: user
+        schema:
+          type: integer
+      tags:
+      - importer
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedDataImportSessionList'
+          description: ''
+    post:
+      operationId: importer_session_create
+      description: API endpoint for accessing a list of DataImportSession objects.
+      tags:
+      - importer
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/DataImportSession'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/DataImportSession'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/DataImportSession'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataImportSession'
+          description: ''
+    delete:
+      operationId: importer_session_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - importer
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/importer/session/{id}/:
+    get:
+      operationId: importer_session_retrieve
+      description: Detail endpoint for a single DataImportSession object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - importer
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataImportSession'
+          description: ''
+    put:
+      operationId: importer_session_update
+      description: Detail endpoint for a single DataImportSession object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - importer
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/DataImportSession'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/DataImportSession'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/DataImportSession'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataImportSession'
+          description: ''
+    patch:
+      operationId: importer_session_partial_update
+      description: Detail endpoint for a single DataImportSession object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - importer
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedDataImportSession'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedDataImportSession'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedDataImportSession'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataImportSession'
+          description: ''
+    delete:
+      operationId: importer_session_destroy
+      description: Detail endpoint for a single DataImportSession object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - importer
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+  /api/importer/session/{id}/accept_fields/:
+    post:
+      operationId: importer_session_accept_fields_create
+      description: Accept the field mapping for a DataImportSession.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - importer
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataImportSession'
+          description: ''
+  /api/importer/session/{id}/accept_rows/:
+    post:
+      operationId: importer_session_accept_rows_create
+      description: API endpoint to accept the rows for a DataImportSession.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - importer
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/DataImportAcceptRow'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/DataImportAcceptRow'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/DataImportAcceptRow'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/DataImportAcceptRow'
+          description: ''
+  /api/label/print/:
+    post:
+      operationId: label_print_create
+      description: POST action for printing labels.
+      tags:
+      - label
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/LabelPrint'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/LabelPrint'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/LabelPrint'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LabelPrint'
+          description: ''
+  /api/label/template/:
+    get:
+      operationId: label_template_list
+      description: API endpoint for viewing list of LabelTemplate objects.
+      parameters:
+      - in: query
+        name: enabled
+        schema:
+          type: boolean
+      - in: query
+        name: items
+        schema:
+          type: string
+        description: Items
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: model_type
+        schema:
+          type: string
+          enum:
+          - build
+          - buildline
+          - part
+          - purchaseorder
+          - returnorder
+          - salesorder
+          - salesordershipment
+          - stockitem
+          - stocklocation
+        description: |-
+          Model Type
+
+          * `build` - Build Order
+          * `buildline` - Build Order Line Item
+          * `purchaseorder` - Purchase Order
+          * `salesorder` - Sales Order
+          * `salesordershipment` - Sales Order Shipment
+          * `returnorder` - Return Order
+          * `part` - Part
+          * `stockitem` - Stock Item
+          * `stocklocation` - Stock Location
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - label
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedLabelTemplateList'
+          description: ''
+    post:
+      operationId: label_template_create
+      description: API endpoint for viewing list of LabelTemplate objects.
+      tags:
+      - label
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/LabelTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/LabelTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/LabelTemplate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LabelTemplate'
+          description: ''
+  /api/label/template/{id}/:
+    get:
+      operationId: label_template_retrieve
+      description: Detail API endpoint for label template model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - label
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LabelTemplate'
+          description: ''
+    put:
+      operationId: label_template_update
+      description: Detail API endpoint for label template model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - label
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/LabelTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/LabelTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/LabelTemplate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LabelTemplate'
+          description: ''
+    patch:
+      operationId: label_template_partial_update
+      description: Detail API endpoint for label template model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - label
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedLabelTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedLabelTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedLabelTemplate'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LabelTemplate'
+          description: ''
+    delete:
+      operationId: label_template_destroy
+      description: Detail API endpoint for label template model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - label
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+  /api/label/template/{id}/metadata/:
+    get:
+      operationId: label_template_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - label
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: label_template_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - label
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: label_template_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - label
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/license/:
+    get:
+      operationId: license_retrieve
+      description: Return information about the InvenTree server.
+      tags:
+      - license
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LicenseView'
+          description: ''
+  /api/locate/:
+    post:
+      operationId: locate_create
+      description: Identify or 'locate' a stock item or location with a plugin.
+      tags:
+      - locate
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/LocatePlugin'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/LocatePlugin'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/LocatePlugin'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LocatePlugin'
+          description: ''
+  /api/machine/:
+    get:
+      operationId: machine_list
+      description: |-
+        API endpoint for list of Machine objects.
+
+        - GET: Return a list of all Machine objects
+        - POST: create a MachineConfig
+      parameters:
+      - in: query
+        name: active
+        schema:
+          type: boolean
+      - in: query
+        name: driver
+        schema:
+          type: string
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: machine_type
+        schema:
+          type: string
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - machine
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedMachineConfigList'
+          description: ''
+    post:
+      operationId: machine_create
+      description: |-
+        API endpoint for list of Machine objects.
+
+        - GET: Return a list of all Machine objects
+        - POST: create a MachineConfig
+      tags:
+      - machine
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/MachineConfigCreate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/MachineConfigCreate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/MachineConfigCreate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:admin
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/MachineConfigCreate'
+          description: ''
+  /api/machine/{id}/:
+    get:
+      operationId: machine_retrieve
+      description: |-
+        API detail endpoint for MachineConfig object.
+
+        - GET: return a single MachineConfig
+        - PUT: update a MachineConfig
+        - PATCH: partial update a MachineConfig
+        - DELETE: delete a MachineConfig
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - machine
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/MachineConfig'
+          description: ''
+    put:
+      operationId: machine_update
+      description: |-
+        API detail endpoint for MachineConfig object.
+
+        - GET: return a single MachineConfig
+        - PUT: update a MachineConfig
+        - PATCH: partial update a MachineConfig
+        - DELETE: delete a MachineConfig
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - machine
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/MachineConfig'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/MachineConfig'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/MachineConfig'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/MachineConfig'
+          description: ''
+    patch:
+      operationId: machine_partial_update
+      description: |-
+        API detail endpoint for MachineConfig object.
+
+        - GET: return a single MachineConfig
+        - PUT: update a MachineConfig
+        - PATCH: partial update a MachineConfig
+        - DELETE: delete a MachineConfig
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - machine
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMachineConfig'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMachineConfig'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMachineConfig'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/MachineConfig'
+          description: ''
+    delete:
+      operationId: machine_destroy
+      description: |-
+        API detail endpoint for MachineConfig object.
+
+        - GET: return a single MachineConfig
+        - PUT: update a MachineConfig
+        - PATCH: partial update a MachineConfig
+        - DELETE: delete a MachineConfig
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - machine
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:admin
+      responses:
+        '204':
+          description: No response body
+  /api/machine/{id}/restart/:
+    post:
+      operationId: machine_restart_create
+      description: Restart machine by pk.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - machine
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/MachineRestart'
+          description: ''
+  /api/machine/{id}/settings/:
+    get:
+      operationId: machine_settings_list
+      description: Return all settings for a machine config.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - machine
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/MachineSetting'
+          description: ''
+  /api/machine/{id}/settings/{config_type}/{key}/:
+    get:
+      operationId: machine_settings_retrieve
+      description: |-
+        Detail endpoint for a machine-specific setting.
+
+        - GET: Get machine setting detail
+        - PUT: Update machine setting
+        - PATCH: Update machine setting
+
+        (Note that these cannot be created or deleted via API)
+      parameters:
+      - in: path
+        name: config_type
+        schema:
+          type: string
+          pattern: ^M|D$
+        required: true
+      - in: path
+        name: id
+        schema:
+          type: string
+          format: uuid
+        required: true
+      - in: path
+        name: key
+        schema:
+          type: string
+          pattern: ^\w+$
+        required: true
+      tags:
+      - machine
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/MachineSetting'
+          description: ''
+    put:
+      operationId: machine_settings_update
+      description: |-
+        Detail endpoint for a machine-specific setting.
+
+        - GET: Get machine setting detail
+        - PUT: Update machine setting
+        - PATCH: Update machine setting
+
+        (Note that these cannot be created or deleted via API)
+      parameters:
+      - in: path
+        name: config_type
+        schema:
+          type: string
+          pattern: ^M|D$
+        required: true
+      - in: path
+        name: id
+        schema:
+          type: string
+          format: uuid
+        required: true
+      - in: path
+        name: key
+        schema:
+          type: string
+          pattern: ^\w+$
+        required: true
+      tags:
+      - machine
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/MachineSetting'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/MachineSetting'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/MachineSetting'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/MachineSetting'
+          description: ''
+    patch:
+      operationId: machine_settings_partial_update
+      description: |-
+        Detail endpoint for a machine-specific setting.
+
+        - GET: Get machine setting detail
+        - PUT: Update machine setting
+        - PATCH: Update machine setting
+
+        (Note that these cannot be created or deleted via API)
+      parameters:
+      - in: path
+        name: config_type
+        schema:
+          type: string
+          pattern: ^M|D$
+        required: true
+      - in: path
+        name: id
+        schema:
+          type: string
+          format: uuid
+        required: true
+      - in: path
+        name: key
+        schema:
+          type: string
+          pattern: ^\w+$
+        required: true
+      tags:
+      - machine
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMachineSetting'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMachineSetting'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMachineSetting'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/MachineSetting'
+          description: ''
+  /api/machine/drivers/:
+    get:
+      operationId: machine_drivers_list
+      description: List all machine drivers.
+      tags:
+      - machine
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/MachineDriver'
+          description: ''
+  /api/machine/status/:
+    get:
+      operationId: machine_status_retrieve
+      description: Provide status data for the machine registry.
+      tags:
+      - machine
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/MachineRegistryStatus'
+          description: ''
+  /api/machine/types/:
+    get:
+      operationId: machine_types_list
+      description: List all machine types.
+      tags:
+      - machine
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/MachineType'
+          description: ''
+  /api/news/:
+    get:
+      operationId: news_list
+      description: List view for all news items.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: read
+        schema:
+          type: boolean
+      tags:
+      - news
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedNewsFeedEntryList'
+          description: ''
+    delete:
+      operationId: news_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - news
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/news/{id}/:
+    get:
+      operationId: news_retrieve
+      description: Detail view for an individual news feed object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - news
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NewsFeedEntry'
+          description: ''
+    put:
+      operationId: news_update
+      description: Detail view for an individual news feed object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - news
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/NewsFeedEntry'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/NewsFeedEntry'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/NewsFeedEntry'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NewsFeedEntry'
+          description: ''
+    patch:
+      operationId: news_partial_update
+      description: Detail view for an individual news feed object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - news
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedNewsFeedEntry'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedNewsFeedEntry'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedNewsFeedEntry'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NewsFeedEntry'
+          description: ''
+    delete:
+      operationId: news_destroy
+      description: Detail view for an individual news feed object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - news
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+  /api/notes-image-upload/:
+    get:
+      operationId: notes_image_upload_list
+      description: List view for all notes images.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - notes-image-upload
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedNotesImageList'
+          description: ''
+    post:
+      operationId: notes_image_upload_create
+      description: List view for all notes images.
+      tags:
+      - notes-image-upload
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/NotesImage'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/NotesImage'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/NotesImage'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NotesImage'
+          description: ''
+  /api/notifications/:
+    get:
+      operationId: notifications_list
+      description: List view for all notifications of the current user.
+      parameters:
+      - in: query
+        name: category
+        schema:
+          type: string
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: read
+        schema:
+          type: boolean
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - notifications
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedNotificationMessageList'
+          description: ''
+    delete:
+      operationId: notifications_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - notifications
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/notifications/{id}/:
+    get:
+      operationId: notifications_retrieve
+      description: |-
+        Detail view for an individual notification object.
+
+        - User can only view / delete their own notification objects
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - notifications
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NotificationMessage'
+          description: ''
+    put:
+      operationId: notifications_update
+      description: |-
+        Detail view for an individual notification object.
+
+        - User can only view / delete their own notification objects
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - notifications
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/NotificationMessage'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/NotificationMessage'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/NotificationMessage'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NotificationMessage'
+          description: ''
+    patch:
+      operationId: notifications_partial_update
+      description: |-
+        Detail view for an individual notification object.
+
+        - User can only view / delete their own notification objects
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - notifications
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedNotificationMessage'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedNotificationMessage'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedNotificationMessage'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NotificationMessage'
+          description: ''
+    delete:
+      operationId: notifications_destroy
+      description: |-
+        Detail view for an individual notification object.
+
+        - User can only view / delete their own notification objects
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - notifications
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+  /api/notifications/readall/:
+    get:
+      operationId: notifications_readall_retrieve
+      description: Set all messages for the current user as read.
+      tags:
+      - notifications
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NotificationMessage'
+          description: ''
+  /api/order/po/:
+    get:
+      operationId: order_po_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: assigned_to
+        schema:
+          type: integer
+        description: Responsible
+      - in: query
+        name: assigned_to_me
+        schema:
+          type: boolean
+        description: Assigned to me
+      - in: query
+        name: completed_after
+        schema:
+          type: string
+          format: date
+        description: Completed After
+      - in: query
+        name: completed_before
+        schema:
+          type: string
+          format: date
+        description: Completed Before
+      - in: query
+        name: created_after
+        schema:
+          type: string
+          format: date
+        description: Created After
+      - in: query
+        name: created_before
+        schema:
+          type: string
+          format: date
+        description: Created Before
+      - in: query
+        name: created_by
+        schema:
+          type: integer
+        description: Created By
+      - in: query
+        name: has_project_code
+        schema:
+          type: boolean
+        description: Has Project Code
+      - in: query
+        name: has_start_date
+        schema:
+          type: boolean
+        description: Has Start Date
+      - in: query
+        name: has_target_date
+        schema:
+          type: boolean
+        description: Has Target Date
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: max_date
+        schema:
+          type: string
+          format: date
+        description: Max Date
+      - in: query
+        name: min_date
+        schema:
+          type: string
+          format: date
+        description: Min Date
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: outstanding
+        schema:
+          type: boolean
+        description: Outstanding
+      - in: query
+        name: overdue
+        schema:
+          type: boolean
+        description: overdue
+      - in: query
+        name: part
+        schema:
+          type: integer
+        description: Part
+      - in: query
+        name: project_code
+        schema:
+          type: integer
+        description: Project Code
+      - in: query
+        name: reference
+        schema:
+          type: string
+        description: Order Reference
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: start_date_after
+        schema:
+          type: string
+          format: date
+        description: Start Date After
+      - in: query
+        name: start_date_before
+        schema:
+          type: string
+          format: date
+        description: Start Date Before
+      - in: query
+        name: status
+        schema:
+          type: integer
+        description: Order Status
+      - in: query
+        name: supplier
+        schema:
+          type: integer
+      - in: query
+        name: supplier_part
+        schema:
+          type: integer
+        description: Supplier Part
+      - in: query
+        name: target_date_after
+        schema:
+          type: string
+          format: date
+        description: Target Date After
+      - in: query
+        name: target_date_before
+        schema:
+          type: string
+          format: date
+        description: Target Date Before
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPurchaseOrderList'
+          description: ''
+    post:
+      operationId: order_po_create
+      description: |-
+        API endpoint for accessing a list of PurchaseOrder objects.
+
+        - GET: Return list of PurchaseOrder objects (with filters)
+        - POST: Create a new PurchaseOrder object
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrder'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrder'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrder'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:purchase_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrder'
+          description: ''
+  /api/order/po-extra-line/:
+    get:
+      operationId: order_po_extra_line_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - in: query
+        name: order
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPurchaseOrderExtraLineList'
+          description: ''
+    post:
+      operationId: order_po_extra_line_create
+      description: API endpoint for accessing a list of PurchaseOrderExtraLine objects.
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderExtraLine'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderExtraLine'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderExtraLine'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:purchase_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrderExtraLine'
+          description: ''
+  /api/order/po-extra-line/{id}/:
+    get:
+      operationId: order_po_extra_line_retrieve
+      description: API endpoint for detail view of a PurchaseOrderExtraLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrderExtraLine'
+          description: ''
+    put:
+      operationId: order_po_extra_line_update
+      description: API endpoint for detail view of a PurchaseOrderExtraLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderExtraLine'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderExtraLine'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderExtraLine'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrderExtraLine'
+          description: ''
+    patch:
+      operationId: order_po_extra_line_partial_update
+      description: API endpoint for detail view of a PurchaseOrderExtraLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPurchaseOrderExtraLine'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPurchaseOrderExtraLine'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPurchaseOrderExtraLine'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrderExtraLine'
+          description: ''
+    delete:
+      operationId: order_po_extra_line_destroy
+      description: API endpoint for detail view of a PurchaseOrderExtraLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:purchase_order
+      responses:
+        '204':
+          description: No response body
+  /api/order/po-extra-line/{id}/metadata/:
+    get:
+      operationId: order_po_extra_line_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: order_po_extra_line_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: order_po_extra_line_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/order/po-line/:
+    get:
+      operationId: order_po_line_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: base_part
+        schema:
+          type: integer
+        description: Internal Part
+      - in: query
+        name: has_pricing
+        schema:
+          type: boolean
+        description: Has Pricing
+      - in: query
+        name: include_variants
+        schema:
+          type: boolean
+        description: Include Variants
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - in: query
+        name: order
+        schema:
+          type: integer
+        description: Order
+      - in: query
+        name: order_complete
+        schema:
+          type: boolean
+        description: Order Complete
+      - in: query
+        name: order_status
+        schema:
+          type: integer
+        description: Order Status
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+        description: Supplier Part
+      - in: query
+        name: pending
+        schema:
+          type: boolean
+        description: Order Pending
+      - in: query
+        name: received
+        schema:
+          type: boolean
+        description: Items Received
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPurchaseOrderLineItemList'
+          description: ''
+    post:
+      operationId: order_po_line_create
+      description: |-
+        API endpoint for accessing a list of PurchaseOrderLineItem objects.
+
+        - GET: Return a list of PurchaseOrder Line Item objects
+        - POST: Create a new PurchaseOrderLineItem object
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderLineItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderLineItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderLineItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:purchase_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrderLineItem'
+          description: ''
+    delete:
+      operationId: order_po_line_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:purchase_order
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/order/po-line/{id}/:
+    get:
+      operationId: order_po_line_retrieve
+      description: Detail API endpoint for PurchaseOrderLineItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrderLineItem'
+          description: ''
+    put:
+      operationId: order_po_line_update
+      description: Detail API endpoint for PurchaseOrderLineItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderLineItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderLineItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderLineItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrderLineItem'
+          description: ''
+    patch:
+      operationId: order_po_line_partial_update
+      description: Detail API endpoint for PurchaseOrderLineItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPurchaseOrderLineItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPurchaseOrderLineItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPurchaseOrderLineItem'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrderLineItem'
+          description: ''
+    delete:
+      operationId: order_po_line_destroy
+      description: Detail API endpoint for PurchaseOrderLineItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:purchase_order
+      responses:
+        '204':
+          description: No response body
+  /api/order/po-line/{id}/metadata/:
+    get:
+      operationId: order_po_line_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: order_po_line_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: order_po_line_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/order/po/{id}/:
+    get:
+      operationId: order_po_retrieve
+      description: API endpoint for detail view of a PurchaseOrder object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrder'
+          description: ''
+    put:
+      operationId: order_po_update
+      description: API endpoint for detail view of a PurchaseOrder object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrder'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrder'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrder'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrder'
+          description: ''
+    patch:
+      operationId: order_po_partial_update
+      description: API endpoint for detail view of a PurchaseOrder object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPurchaseOrder'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPurchaseOrder'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPurchaseOrder'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrder'
+          description: ''
+    delete:
+      operationId: order_po_destroy
+      description: API endpoint for detail view of a PurchaseOrder object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:purchase_order
+      responses:
+        '204':
+          description: No response body
+  /api/order/po/{id}/cancel/:
+    post:
+      operationId: order_po_cancel_create
+      description: |-
+        API endpoint to 'cancel' a purchase order.
+
+        The purchase order must be in a state which can be cancelled
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          description: No response body
+  /api/order/po/{id}/complete/:
+    post:
+      operationId: order_po_complete_create
+      description: API endpoint to 'complete' a purchase order.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderComplete'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderComplete'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderComplete'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrderComplete'
+          description: ''
+  /api/order/po/{id}/hold/:
+    post:
+      operationId: order_po_hold_create
+      description: API endpoint to place a PurchaseOrder on hold.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          description: No response body
+  /api/order/po/{id}/issue/:
+    post:
+      operationId: order_po_issue_create
+      description: API endpoint to 'issue' (place) a PurchaseOrder.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          description: No response body
+  /api/order/po/{id}/metadata/:
+    get:
+      operationId: order_po_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: order_po_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: order_po_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:purchase_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/order/po/{id}/receive/:
+    post:
+      operationId: order_po_receive_create
+      description: |-
+        API endpoint to receive stock items against a PurchaseOrder.
+
+        - The purchase order is specified in the URL.
+        - Items to receive are specified as a list called "items" with the following options:
+            - line_item: pk of the PO Line item
+            - supplier_part: pk value of the supplier part
+            - quantity: quantity to receive
+            - status: stock item status
+            - expiry_date: stock item expiry date (optional)
+            - location: destination for stock item (optional)
+            - batch_code: the batch code for this stock item
+            - serial_numbers: serial numbers for this stock item
+        - A global location must also be specified. This is used when no locations are specified for items, and no location is given in the PO line item
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderReceive'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderReceive'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PurchaseOrderReceive'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PurchaseOrderReceive'
+          description: ''
+  /api/order/po/status/:
+    get:
+      operationId: order_po_status_retrieve
+      description: Retrieve information about a specific status code
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GenericStateClass'
+          description: ''
+        '400':
+          description: Invalid request
+  /api/order/ro/:
+    get:
+      operationId: order_ro_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: assigned_to
+        schema:
+          type: integer
+        description: Responsible
+      - in: query
+        name: assigned_to_me
+        schema:
+          type: boolean
+        description: Assigned to me
+      - in: query
+        name: completed_after
+        schema:
+          type: string
+          format: date
+        description: Completed After
+      - in: query
+        name: completed_before
+        schema:
+          type: string
+          format: date
+        description: Completed Before
+      - in: query
+        name: created_after
+        schema:
+          type: string
+          format: date
+        description: Created After
+      - in: query
+        name: created_before
+        schema:
+          type: string
+          format: date
+        description: Created Before
+      - in: query
+        name: created_by
+        schema:
+          type: integer
+        description: Created By
+      - in: query
+        name: customer
+        schema:
+          type: integer
+      - in: query
+        name: has_project_code
+        schema:
+          type: boolean
+        description: Has Project Code
+      - in: query
+        name: has_start_date
+        schema:
+          type: boolean
+        description: Has Start Date
+      - in: query
+        name: has_target_date
+        schema:
+          type: boolean
+        description: Has Target Date
+      - in: query
+        name: include_variants
+        schema:
+          type: boolean
+        description: Include Variants
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: max_date
+        schema:
+          type: string
+          format: date
+        description: Max Date
+      - in: query
+        name: min_date
+        schema:
+          type: string
+          format: date
+        description: Min Date
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: outstanding
+        schema:
+          type: boolean
+        description: Outstanding
+      - in: query
+        name: overdue
+        schema:
+          type: boolean
+        description: overdue
+      - in: query
+        name: part
+        schema:
+          type: integer
+      - in: query
+        name: project_code
+        schema:
+          type: integer
+        description: Project Code
+      - in: query
+        name: reference
+        schema:
+          type: string
+        description: Order Reference
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: start_date_after
+        schema:
+          type: string
+          format: date
+        description: Start Date After
+      - in: query
+        name: start_date_before
+        schema:
+          type: string
+          format: date
+        description: Start Date Before
+      - in: query
+        name: status
+        schema:
+          type: integer
+        description: Order Status
+      - in: query
+        name: target_date_after
+        schema:
+          type: string
+          format: date
+        description: Target Date After
+      - in: query
+        name: target_date_before
+        schema:
+          type: string
+          format: date
+        description: Target Date Before
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedReturnOrderList'
+          description: ''
+    post:
+      operationId: order_ro_create
+      description: API endpoint for accessing a list of ReturnOrder objects.
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReturnOrder'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReturnOrder'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReturnOrder'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:return_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnOrder'
+          description: ''
+  /api/order/ro-extra-line/:
+    get:
+      operationId: order_ro_extra_line_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - in: query
+        name: order
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedReturnOrderExtraLineList'
+          description: ''
+    post:
+      operationId: order_ro_extra_line_create
+      description: API endpoint for accessing a list of ReturnOrderExtraLine objects.
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderExtraLine'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderExtraLine'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderExtraLine'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:return_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnOrderExtraLine'
+          description: ''
+  /api/order/ro-extra-line/{id}/:
+    get:
+      operationId: order_ro_extra_line_retrieve
+      description: API endpoint for detail view of a ReturnOrderExtraLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnOrderExtraLine'
+          description: ''
+    put:
+      operationId: order_ro_extra_line_update
+      description: API endpoint for detail view of a ReturnOrderExtraLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderExtraLine'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderExtraLine'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderExtraLine'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnOrderExtraLine'
+          description: ''
+    patch:
+      operationId: order_ro_extra_line_partial_update
+      description: API endpoint for detail view of a ReturnOrderExtraLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedReturnOrderExtraLine'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedReturnOrderExtraLine'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedReturnOrderExtraLine'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnOrderExtraLine'
+          description: ''
+    delete:
+      operationId: order_ro_extra_line_destroy
+      description: API endpoint for detail view of a ReturnOrderExtraLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:return_order
+      responses:
+        '204':
+          description: No response body
+  /api/order/ro-extra-line/{id}/metadata/:
+    get:
+      operationId: order_ro_extra_line_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: order_ro_extra_line_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: order_ro_extra_line_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/order/ro-line/:
+    get:
+      operationId: order_ro_line_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: has_pricing
+        schema:
+          type: boolean
+        description: Has Pricing
+      - in: query
+        name: item
+        schema:
+          type: integer
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - in: query
+        name: order
+        schema:
+          type: integer
+      - in: query
+        name: order_status
+        schema:
+          type: integer
+        description: Order Status
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: outcome
+        schema:
+          type: integer
+        description: outcome
+      - in: query
+        name: received
+        schema:
+          type: boolean
+        description: received
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedReturnOrderLineItemList'
+          description: ''
+    post:
+      operationId: order_ro_line_create
+      description: API endpoint for accessing a list of ReturnOrderLineItemList objects.
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderLineItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderLineItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderLineItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:return_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnOrderLineItem'
+          description: ''
+  /api/order/ro-line/{id}/:
+    get:
+      operationId: order_ro_line_retrieve
+      description: API endpoint for detail view of a ReturnOrderLineItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnOrderLineItem'
+          description: ''
+    put:
+      operationId: order_ro_line_update
+      description: API endpoint for detail view of a ReturnOrderLineItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderLineItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderLineItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderLineItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnOrderLineItem'
+          description: ''
+    patch:
+      operationId: order_ro_line_partial_update
+      description: API endpoint for detail view of a ReturnOrderLineItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedReturnOrderLineItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedReturnOrderLineItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedReturnOrderLineItem'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnOrderLineItem'
+          description: ''
+    delete:
+      operationId: order_ro_line_destroy
+      description: API endpoint for detail view of a ReturnOrderLineItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:return_order
+      responses:
+        '204':
+          description: No response body
+  /api/order/ro-line/{id}/metadata/:
+    get:
+      operationId: order_ro_line_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: order_ro_line_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: order_ro_line_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/order/ro-line/status/:
+    get:
+      operationId: order_ro_line_status_retrieve
+      description: Retrieve information about a specific status code
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GenericStateClass'
+          description: ''
+        '400':
+          description: Invalid request
+  /api/order/ro/{id}/:
+    get:
+      operationId: order_ro_retrieve
+      description: API endpoint for detail view of a single ReturnOrder object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnOrder'
+          description: ''
+    put:
+      operationId: order_ro_update
+      description: API endpoint for detail view of a single ReturnOrder object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReturnOrder'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReturnOrder'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReturnOrder'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnOrder'
+          description: ''
+    patch:
+      operationId: order_ro_partial_update
+      description: API endpoint for detail view of a single ReturnOrder object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedReturnOrder'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedReturnOrder'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedReturnOrder'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnOrder'
+          description: ''
+    delete:
+      operationId: order_ro_destroy
+      description: API endpoint for detail view of a single ReturnOrder object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:return_order
+      responses:
+        '204':
+          description: No response body
+  /api/order/ro/{id}/cancel/:
+    post:
+      operationId: order_ro_cancel_create
+      description: API endpoint to cancel a ReturnOrder.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          description: No response body
+  /api/order/ro/{id}/complete/:
+    post:
+      operationId: order_ro_complete_create
+      description: API endpoint to complete a ReturnOrder.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          description: No response body
+  /api/order/ro/{id}/hold/:
+    post:
+      operationId: order_ro_hold_create
+      description: API endpoint to hold a ReturnOrder.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          description: No response body
+  /api/order/ro/{id}/issue/:
+    post:
+      operationId: order_ro_issue_create
+      description: API endpoint to issue (place) a ReturnOrder.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          description: No response body
+  /api/order/ro/{id}/metadata/:
+    get:
+      operationId: order_ro_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: order_ro_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: order_ro_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:return_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/order/ro/{id}/receive/:
+    post:
+      operationId: order_ro_receive_create
+      description: API endpoint to receive items against a ReturnOrder.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderReceive'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderReceive'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReturnOrderReceive'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnOrderReceive'
+          description: ''
+  /api/order/ro/status/:
+    get:
+      operationId: order_ro_status_retrieve
+      description: Retrieve information about a specific status code
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GenericStateClass'
+          description: ''
+        '400':
+          description: Invalid request
+  /api/order/so/:
+    get:
+      operationId: order_so_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: assigned_to
+        schema:
+          type: integer
+        description: Responsible
+      - in: query
+        name: assigned_to_me
+        schema:
+          type: boolean
+        description: Assigned to me
+      - in: query
+        name: completed_after
+        schema:
+          type: string
+          format: date
+        description: Completed After
+      - in: query
+        name: completed_before
+        schema:
+          type: string
+          format: date
+        description: Completed Before
+      - in: query
+        name: created_after
+        schema:
+          type: string
+          format: date
+        description: Created After
+      - in: query
+        name: created_before
+        schema:
+          type: string
+          format: date
+        description: Created Before
+      - in: query
+        name: created_by
+        schema:
+          type: integer
+        description: Created By
+      - in: query
+        name: customer
+        schema:
+          type: integer
+      - in: query
+        name: has_project_code
+        schema:
+          type: boolean
+        description: Has Project Code
+      - in: query
+        name: has_start_date
+        schema:
+          type: boolean
+        description: Has Start Date
+      - in: query
+        name: has_target_date
+        schema:
+          type: boolean
+        description: Has Target Date
+      - in: query
+        name: include_variants
+        schema:
+          type: boolean
+        description: Include Variants
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: max_date
+        schema:
+          type: string
+          format: date
+        description: Max Date
+      - in: query
+        name: min_date
+        schema:
+          type: string
+          format: date
+        description: Min Date
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: outstanding
+        schema:
+          type: boolean
+        description: Outstanding
+      - in: query
+        name: overdue
+        schema:
+          type: boolean
+        description: overdue
+      - in: query
+        name: part
+        schema:
+          type: integer
+      - in: query
+        name: project_code
+        schema:
+          type: integer
+        description: Project Code
+      - in: query
+        name: reference
+        schema:
+          type: string
+        description: Order Reference
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: start_date_after
+        schema:
+          type: string
+          format: date
+        description: Start Date After
+      - in: query
+        name: start_date_before
+        schema:
+          type: string
+          format: date
+        description: Start Date Before
+      - in: query
+        name: status
+        schema:
+          type: integer
+        description: Order Status
+      - in: query
+        name: target_date_after
+        schema:
+          type: string
+          format: date
+        description: Target Date After
+      - in: query
+        name: target_date_before
+        schema:
+          type: string
+          format: date
+        description: Target Date Before
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedSalesOrderList'
+          description: ''
+    post:
+      operationId: order_so_create
+      description: |-
+        API endpoint for accessing a list of SalesOrder objects.
+
+        - GET: Return list of SalesOrder objects (with filters)
+        - POST: Create a new SalesOrder
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrder'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrder'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrder'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:sales_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrder'
+          description: ''
+  /api/order/so-allocation/:
+    get:
+      operationId: order_so_allocation_list
+      description: API endpoint for listing SalesOrderAllocation objects.
+      parameters:
+      - in: query
+        name: assigned_to_shipment
+        schema:
+          type: boolean
+        description: Has Shipment
+      - in: query
+        name: include_variants
+        schema:
+          type: boolean
+        description: Include Variants
+      - in: query
+        name: item
+        schema:
+          type: integer
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: line
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - in: query
+        name: order
+        schema:
+          type: integer
+        description: Order
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: outstanding
+        schema:
+          type: boolean
+        description: Outstanding
+      - in: query
+        name: part
+        schema:
+          type: integer
+        description: Part
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: shipment
+        schema:
+          type: integer
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedSalesOrderAllocationList'
+          description: ''
+    put:
+      operationId: order_so_allocation_bulk_update
+      description: |-
+        Perform a PUT operation against this list endpoint.
+
+        Simply redirects to the PATCH method.
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrderAllocation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrderAllocation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrderAllocation'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderAllocation'
+          description: ''
+    patch:
+      operationId: order_so_allocation_bulk_partial_update
+      description: |-
+        Perform a PATCH operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support PATCH,
+        so this method is provided as a custom implementation.
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderAllocation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderAllocation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderAllocation'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderAllocation'
+          description: ''
+  /api/order/so-allocation/{id}/:
+    get:
+      operationId: order_so_allocation_retrieve
+      description: API endpoint for detali view of a SalesOrderAllocation object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderAllocation'
+          description: ''
+    put:
+      operationId: order_so_allocation_update
+      description: API endpoint for detali view of a SalesOrderAllocation object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrderAllocation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrderAllocation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrderAllocation'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderAllocation'
+          description: ''
+    patch:
+      operationId: order_so_allocation_partial_update
+      description: API endpoint for detali view of a SalesOrderAllocation object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderAllocation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderAllocation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderAllocation'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderAllocation'
+          description: ''
+    delete:
+      operationId: order_so_allocation_destroy
+      description: API endpoint for detali view of a SalesOrderAllocation object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:sales_order
+      responses:
+        '204':
+          description: No response body
+  /api/order/so-extra-line/:
+    get:
+      operationId: order_so_extra_line_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - in: query
+        name: order
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedSalesOrderExtraLineList'
+          description: ''
+    post:
+      operationId: order_so_extra_line_create
+      description: API endpoint for accessing a list of SalesOrderExtraLine objects.
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrderExtraLine'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrderExtraLine'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrderExtraLine'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:sales_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderExtraLine'
+          description: ''
+  /api/order/so-extra-line/{id}/:
+    get:
+      operationId: order_so_extra_line_retrieve
+      description: API endpoint for detail view of a SalesOrderExtraLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderExtraLine'
+          description: ''
+    put:
+      operationId: order_so_extra_line_update
+      description: API endpoint for detail view of a SalesOrderExtraLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrderExtraLine'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrderExtraLine'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrderExtraLine'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderExtraLine'
+          description: ''
+    patch:
+      operationId: order_so_extra_line_partial_update
+      description: API endpoint for detail view of a SalesOrderExtraLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderExtraLine'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderExtraLine'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderExtraLine'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderExtraLine'
+          description: ''
+    delete:
+      operationId: order_so_extra_line_destroy
+      description: API endpoint for detail view of a SalesOrderExtraLine object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:sales_order
+      responses:
+        '204':
+          description: No response body
+  /api/order/so-extra-line/{id}/metadata/:
+    get:
+      operationId: order_so_extra_line_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: order_so_extra_line_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: order_so_extra_line_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/order/so-line/:
+    get:
+      operationId: order_so_line_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: allocated
+        schema:
+          type: boolean
+        description: Allocated
+      - in: query
+        name: completed
+        schema:
+          type: boolean
+        description: Completed
+      - in: query
+        name: has_pricing
+        schema:
+          type: boolean
+        description: Has Pricing
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - in: query
+        name: order
+        schema:
+          type: integer
+        description: Order
+      - in: query
+        name: order_complete
+        schema:
+          type: boolean
+        description: Order Complete
+      - in: query
+        name: order_outstanding
+        schema:
+          type: boolean
+        description: Order Outstanding
+      - in: query
+        name: order_status
+        schema:
+          type: integer
+        description: Order Status
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+        description: Part
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedSalesOrderLineItemList'
+          description: ''
+    post:
+      operationId: order_so_line_create
+      description: API endpoint for accessing a list of SalesOrderLineItem objects.
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrderLineItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrderLineItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrderLineItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:sales_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderLineItem'
+          description: ''
+  /api/order/so-line/{id}/:
+    get:
+      operationId: order_so_line_retrieve
+      description: API endpoint for detail view of a SalesOrderLineItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderLineItem'
+          description: ''
+    put:
+      operationId: order_so_line_update
+      description: API endpoint for detail view of a SalesOrderLineItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrderLineItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrderLineItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrderLineItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderLineItem'
+          description: ''
+    patch:
+      operationId: order_so_line_partial_update
+      description: API endpoint for detail view of a SalesOrderLineItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderLineItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderLineItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderLineItem'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderLineItem'
+          description: ''
+    delete:
+      operationId: order_so_line_destroy
+      description: API endpoint for detail view of a SalesOrderLineItem object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:sales_order
+      responses:
+        '204':
+          description: No response body
+  /api/order/so-line/{id}/metadata/:
+    get:
+      operationId: order_so_line_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: order_so_line_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: order_so_line_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/order/so/{id}/:
+    get:
+      operationId: order_so_retrieve
+      description: API endpoint for detail view of a SalesOrder object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrder'
+          description: ''
+    put:
+      operationId: order_so_update
+      description: API endpoint for detail view of a SalesOrder object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrder'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrder'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrder'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrder'
+          description: ''
+    patch:
+      operationId: order_so_partial_update
+      description: API endpoint for detail view of a SalesOrder object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrder'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrder'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrder'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrder'
+          description: ''
+    delete:
+      operationId: order_so_destroy
+      description: API endpoint for detail view of a SalesOrder object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:sales_order
+      responses:
+        '204':
+          description: No response body
+  /api/order/so/{id}/allocate/:
+    post:
+      operationId: order_so_allocate_create
+      description: |-
+        API endpoint to allocate stock items against a SalesOrder.
+
+        - The SalesOrder is specified in the URL
+        - See the SalesOrderShipmentAllocationSerializer class
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrderShipmentAllocation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrderShipmentAllocation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrderShipmentAllocation'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderShipmentAllocation'
+          description: ''
+  /api/order/so/{id}/allocate-serials/:
+    post:
+      operationId: order_so_allocate_serials_create
+      description: API endpoint to allocation stock items against a SalesOrder, by
+        specifying serial numbers.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrderSerialAllocation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrderSerialAllocation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrderSerialAllocation'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderSerialAllocation'
+          description: ''
+  /api/order/so/{id}/cancel/:
+    post:
+      operationId: order_so_cancel_create
+      description: API endpoint to cancel a SalesOrder.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          description: No response body
+  /api/order/so/{id}/complete/:
+    post:
+      operationId: order_so_complete_create
+      description: API endpoint for manually marking a SalesOrder as "complete".
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrderComplete'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrderComplete'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrderComplete'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderComplete'
+          description: ''
+  /api/order/so/{id}/hold/:
+    post:
+      operationId: order_so_hold_create
+      description: API endpoint to place a SalesOrder on hold.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          description: No response body
+  /api/order/so/{id}/issue/:
+    post:
+      operationId: order_so_issue_create
+      description: API endpoint to issue a SalesOrder.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          description: No response body
+  /api/order/so/{id}/metadata/:
+    get:
+      operationId: order_so_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: order_so_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: order_so_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/order/so/shipment/:
+    get:
+      operationId: order_so_shipment_list
+      description: API list endpoint for SalesOrderShipment model.
+      parameters:
+      - in: query
+        name: delivered
+        schema:
+          type: boolean
+        description: delivered
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - in: query
+        name: order
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: shipped
+        schema:
+          type: boolean
+        description: shipped
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedSalesOrderShipmentList'
+          description: ''
+    post:
+      operationId: order_so_shipment_create
+      description: API list endpoint for SalesOrderShipment model.
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrderShipment'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrderShipment'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrderShipment'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:sales_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderShipment'
+          description: ''
+  /api/order/so/shipment/{id}/:
+    get:
+      operationId: order_so_shipment_retrieve
+      description: API detail endpooint for SalesOrderShipment model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderShipment'
+          description: ''
+    put:
+      operationId: order_so_shipment_update
+      description: API detail endpooint for SalesOrderShipment model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrderShipment'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrderShipment'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrderShipment'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderShipment'
+          description: ''
+    patch:
+      operationId: order_so_shipment_partial_update
+      description: API detail endpooint for SalesOrderShipment model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderShipment'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderShipment'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedSalesOrderShipment'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderShipment'
+          description: ''
+    delete:
+      operationId: order_so_shipment_destroy
+      description: API detail endpooint for SalesOrderShipment model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:sales_order
+      responses:
+        '204':
+          description: No response body
+  /api/order/so/shipment/{id}/metadata/:
+    get:
+      operationId: order_so_shipment_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: order_so_shipment_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: order_so_shipment_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:sales_order
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/order/so/shipment/{id}/ship/:
+    post:
+      operationId: order_so_shipment_ship_create
+      description: API endpoint for completing (shipping) a SalesOrderShipment.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - order
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SalesOrderShipmentComplete'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SalesOrderShipmentComplete'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SalesOrderShipmentComplete'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:sales_order
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SalesOrderShipmentComplete'
+          description: ''
+  /api/order/so/status/:
+    get:
+      operationId: order_so_status_retrieve
+      description: Retrieve information about a specific status code
+      tags:
+      - order
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GenericStateClass'
+          description: ''
+        '400':
+          description: Invalid request
+  /api/part/:
+    get:
+      operationId: part_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: IPN
+        schema:
+          type: string
+        description: Filter by exact IPN (internal part number)
+      - in: query
+        name: IPN_regex
+        schema:
+          type: string
+        description: Filter by regex on IPN (internal part number)
+      - in: query
+        name: active
+        schema:
+          type: boolean
+      - in: query
+        name: ancestor
+        schema:
+          type: integer
+      - in: query
+        name: assembly
+        schema:
+          type: boolean
+      - in: query
+        name: bom_valid
+        schema:
+          type: boolean
+        description: BOM Valid
+      - in: query
+        name: component
+        schema:
+          type: boolean
+      - in: query
+        name: convert_from
+        schema:
+          type: integer
+      - in: query
+        name: created_after
+        schema:
+          type: string
+          format: date
+        description: Updated after
+      - in: query
+        name: created_before
+        schema:
+          type: string
+          format: date
+        description: Updated before
+      - in: query
+        name: default_location
+        schema:
+          type: integer
+        description: Default Location
+      - in: query
+        name: depleted_stock
+        schema:
+          type: boolean
+        description: Depleted Stock
+      - in: query
+        name: exclude_tree
+        schema:
+          type: integer
+      - in: query
+        name: has_ipn
+        schema:
+          type: boolean
+        description: Has IPN
+      - in: query
+        name: has_pricing
+        schema:
+          type: boolean
+        description: Has Pricing
+      - in: query
+        name: has_revisions
+        schema:
+          type: boolean
+        description: Has Revisions
+      - in: query
+        name: has_stock
+        schema:
+          type: boolean
+        description: Has stock
+      - in: query
+        name: has_units
+        schema:
+          type: boolean
+        description: Has units
+      - in: query
+        name: in_bom_for
+        schema:
+          type: integer
+      - in: query
+        name: is_revision
+        schema:
+          type: boolean
+        description: Is Revision
+      - in: query
+        name: is_template
+        schema:
+          type: boolean
+      - in: query
+        name: is_variant
+        schema:
+          type: boolean
+        description: Is Variant
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: locked
+        schema:
+          type: boolean
+      - in: query
+        name: low_stock
+        schema:
+          type: boolean
+        description: Low stock
+      - in: query
+        name: name_regex
+        schema:
+          type: string
+        description: Filter by name (regex)
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: purchaseable
+        schema:
+          type: boolean
+      - in: query
+        name: revision_of
+        schema:
+          type: integer
+      - in: query
+        name: salable
+        schema:
+          type: boolean
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: starred
+        schema:
+          type: boolean
+        description: Starred
+      - in: query
+        name: stock_to_build
+        schema:
+          type: boolean
+        description: Required for Build Order
+      - in: query
+        name: stocktake
+        schema:
+          type: boolean
+        description: Has stocktake
+      - in: query
+        name: tags_name
+        schema:
+          type: string
+      - in: query
+        name: tags_slug
+        schema:
+          type: string
+      - in: query
+        name: testable
+        schema:
+          type: boolean
+      - in: query
+        name: trackable
+        schema:
+          type: boolean
+      - in: query
+        name: unallocated_stock
+        schema:
+          type: boolean
+        description: Unallocated stock
+      - in: query
+        name: variant_of
+        schema:
+          type: integer
+        description: Variant Of
+      - in: query
+        name: virtual
+        schema:
+          type: boolean
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPartList'
+          description: ''
+    post:
+      operationId: part_create
+      description: API endpoint for accessing a list of Part objects, or creating
+        a new Part instance.
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Part'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Part'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Part'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part
+        - r:add:build
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Part'
+          description: ''
+    put:
+      operationId: part_bulk_update
+      description: |-
+        Perform a PUT operation against this list endpoint.
+
+        Simply redirects to the PATCH method.
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Part'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Part'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Part'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Part'
+          description: ''
+    patch:
+      operationId: part_bulk_partial_update
+      description: |-
+        Perform a PATCH operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support PATCH,
+        so this method is provided as a custom implementation.
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPart'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPart'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPart'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Part'
+          description: ''
+  /api/part/{id}/:
+    get:
+      operationId: part_retrieve
+      description: API endpoint for detail view of a single Part object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Part'
+          description: ''
+    put:
+      operationId: part_update
+      description: API endpoint for detail view of a single Part object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Part'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Part'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Part'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Part'
+          description: ''
+    patch:
+      operationId: part_partial_update
+      description: API endpoint for detail view of a single Part object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPart'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPart'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPart'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Part'
+          description: ''
+    delete:
+      operationId: part_destroy
+      description: API endpoint for detail view of a single Part object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+        - r:delete:build
+      responses:
+        '204':
+          description: No response body
+  /api/part/{id}/bom-copy/:
+    post:
+      operationId: part_bom_copy_create
+      description: API endpoint for duplicating a BOM.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartCopyBOM'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartCopyBOM'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartCopyBOM'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartCopyBOM'
+          description: ''
+  /api/part/{id}/bom-validate/:
+    get:
+      operationId: part_bom_validate_retrieve
+      description: API endpoint for 'validating' the BOM for a given Part.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BOMValidate'
+          description: ''
+    put:
+      operationId: part_bom_validate_update
+      description: API endpoint for 'validating' the BOM for a given Part.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BOMValidate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BOMValidate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BOMValidate'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BOMValidate'
+          description: ''
+    patch:
+      operationId: part_bom_validate_partial_update
+      description: API endpoint for 'validating' the BOM for a given Part.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedBOMValidate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedBOMValidate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedBOMValidate'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/BOMValidate'
+          description: ''
+  /api/part/{id}/metadata/:
+    get:
+      operationId: part_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: part_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: part_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/part/{id}/pricing/:
+    get:
+      operationId: part_pricing_retrieve
+      description: API endpoint for viewing part pricing data.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartPricing'
+          description: ''
+    put:
+      operationId: part_pricing_update
+      description: API endpoint for viewing part pricing data.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartPricing'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartPricing'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartPricing'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartPricing'
+          description: ''
+    patch:
+      operationId: part_pricing_partial_update
+      description: API endpoint for viewing part pricing data.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPartPricing'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPartPricing'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPartPricing'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartPricing'
+          description: ''
+  /api/part/{id}/requirements/:
+    get:
+      operationId: part_requirements_retrieve
+      description: |-
+        API endpoint detailing 'requirements' information for a particular part.
+
+        This endpoint returns information on upcoming requirements for:
+
+        - Sales Orders
+        - Build Orders
+        - Total requirements
+
+        As this data is somewhat complex to calculate, is it not included in the default API
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          description: No response body
+  /api/part/{id}/scheduling/:
+    get:
+      operationId: part_scheduling_retrieve
+      description: |-
+        API endpoint for delivering "scheduling" information about a given part via the API.
+
+        Returns a chronologically ordered list about future "scheduled" events,
+        concerning stock levels for the part:
+
+        - Purchase Orders (incoming stock)
+        - Sales Orders (outgoing stock)
+        - Build Orders (incoming completed stock)
+        - Build Orders (outgoing allocated stock)
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartScheduling'
+          description: ''
+  /api/part/{id}/serial-numbers/:
+    get:
+      operationId: part_serial_numbers_retrieve
+      description: API endpoint for returning extra serial number information about
+        a particular part.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          description: No response body
+  /api/part/category/:
+    get:
+      operationId: part_category_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: cascade
+        schema:
+          type: boolean
+        description: Include sub-categories in filtered results
+      - in: query
+        name: depth
+        schema:
+          type: number
+        description: Filter by category depth
+      - in: query
+        name: exclude_tree
+        schema:
+          type: integer
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: name
+        schema:
+          type: string
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: parent
+        schema:
+          type: integer
+        description: Filter by parent category
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: starred
+        schema:
+          type: boolean
+        description: Filter by starred categories
+      - in: query
+        name: structural
+        schema:
+          type: boolean
+      - in: query
+        name: top_level
+        schema:
+          type: boolean
+        description: Filter by top-level categories
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part_category
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedCategoryList'
+          description: ''
+    post:
+      operationId: part_category_create
+      description: |-
+        API endpoint for accessing a list of PartCategory objects.
+
+        - GET: Return a list of PartCategory objects
+        - POST: Create a new PartCategory object
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Category'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Category'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Category'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part_category
+        - r:add:build
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Category'
+          description: ''
+    put:
+      operationId: part_category_bulk_update
+      description: |-
+        Perform a PUT operation against this list endpoint.
+
+        Simply redirects to the PATCH method.
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Category'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Category'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Category'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part_category
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Category'
+          description: ''
+    patch:
+      operationId: part_category_bulk_partial_update
+      description: |-
+        Perform a PATCH operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support PATCH,
+        so this method is provided as a custom implementation.
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedCategory'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedCategory'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedCategory'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part_category
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Category'
+          description: ''
+  /api/part/category/{id}/:
+    get:
+      operationId: part_category_retrieve
+      description: Custom get method to pass kwargs.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part_category
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Category'
+          description: ''
+    put:
+      operationId: part_category_update
+      description: Custom put method to pass kwargs.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Category'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Category'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Category'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part_category
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Category'
+          description: ''
+    patch:
+      operationId: part_category_partial_update
+      description: Custom patch method to pass kwargs.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedCategory'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedCategory'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedCategory'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part_category
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Category'
+          description: ''
+    delete:
+      operationId: part_category_destroy
+      description: Custom delete method to pass kwargs.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part_category
+        - r:delete:build
+      responses:
+        '204':
+          description: No response body
+  /api/part/category/{id}/metadata/:
+    get:
+      operationId: part_category_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part_category
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: part_category_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part_category
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: part_category_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part_category
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/part/category/parameters/:
+    get:
+      operationId: part_category_parameters_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part_category
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedCategoryParameterTemplateList'
+          description: ''
+    post:
+      operationId: part_category_parameters_create
+      description: |-
+        API endpoint for accessing a list of PartCategoryParameterTemplate objects.
+
+        - GET: Return a list of PartCategoryParameterTemplate objects
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/CategoryParameterTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/CategoryParameterTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/CategoryParameterTemplate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part_category
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CategoryParameterTemplate'
+          description: ''
+  /api/part/category/parameters/{id}/:
+    get:
+      operationId: part_category_parameters_retrieve
+      description: Detail endpoint for the PartCategoryParameterTemplate model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part_category
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CategoryParameterTemplate'
+          description: ''
+    put:
+      operationId: part_category_parameters_update
+      description: Detail endpoint for the PartCategoryParameterTemplate model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/CategoryParameterTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/CategoryParameterTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/CategoryParameterTemplate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part_category
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CategoryParameterTemplate'
+          description: ''
+    patch:
+      operationId: part_category_parameters_partial_update
+      description: Detail endpoint for the PartCategoryParameterTemplate model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedCategoryParameterTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedCategoryParameterTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedCategoryParameterTemplate'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part_category
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CategoryParameterTemplate'
+          description: ''
+    delete:
+      operationId: part_category_parameters_destroy
+      description: Detail endpoint for the PartCategoryParameterTemplate model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part_category
+      responses:
+        '204':
+          description: No response body
+  /api/part/category/parameters/{id}/metadata/:
+    get:
+      operationId: part_category_parameters_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part_category
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: part_category_parameters_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part_category
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: part_category_parameters_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part_category
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/part/category/tree/:
+    get:
+      operationId: part_category_tree_list
+      description: API endpoint for accessing a list of PartCategory objects ready
+        for rendering a tree.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part_category
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedCategoryTreeList'
+          description: ''
+  /api/part/internal-price/:
+    get:
+      operationId: part_internal_price_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPartInternalPriceList'
+          description: ''
+    post:
+      operationId: part_internal_price_create
+      description: API endpoint for list view of PartInternalPriceBreak model.
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartInternalPrice'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartInternalPrice'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartInternalPrice'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartInternalPrice'
+          description: ''
+  /api/part/internal-price/{id}/:
+    get:
+      operationId: part_internal_price_retrieve
+      description: Detail endpoint for PartInternalPriceBreak model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartInternalPrice'
+          description: ''
+    put:
+      operationId: part_internal_price_update
+      description: Detail endpoint for PartInternalPriceBreak model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartInternalPrice'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartInternalPrice'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartInternalPrice'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartInternalPrice'
+          description: ''
+    patch:
+      operationId: part_internal_price_partial_update
+      description: Detail endpoint for PartInternalPriceBreak model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPartInternalPrice'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPartInternalPrice'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPartInternalPrice'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartInternalPrice'
+          description: ''
+    delete:
+      operationId: part_internal_price_destroy
+      description: Detail endpoint for PartInternalPriceBreak model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+      responses:
+        '204':
+          description: No response body
+  /api/part/parameter/:
+    get:
+      operationId: part_parameter_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: template
+        schema:
+          type: integer
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPartParameterList'
+          description: ''
+    post:
+      operationId: part_parameter_create
+      description: |-
+        API endpoint for accessing a list of PartParameter objects.
+
+        - GET: Return list of PartParameter objects
+        - POST: Create a new PartParameter object
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartParameter'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartParameter'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartParameter'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartParameter'
+          description: ''
+  /api/part/parameter/{id}/:
+    get:
+      operationId: part_parameter_retrieve
+      description: API endpoint for detail view of a single PartParameter object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartParameter'
+          description: ''
+    put:
+      operationId: part_parameter_update
+      description: API endpoint for detail view of a single PartParameter object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartParameter'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartParameter'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartParameter'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartParameter'
+          description: ''
+    patch:
+      operationId: part_parameter_partial_update
+      description: API endpoint for detail view of a single PartParameter object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPartParameter'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPartParameter'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPartParameter'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartParameter'
+          description: ''
+    delete:
+      operationId: part_parameter_destroy
+      description: API endpoint for detail view of a single PartParameter object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+      responses:
+        '204':
+          description: No response body
+  /api/part/parameter/{id}/metadata/:
+    get:
+      operationId: part_parameter_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: part_parameter_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: part_parameter_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/part/parameter/template/:
+    get:
+      operationId: part_parameter_template_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: category
+        schema:
+          type: integer
+      - in: query
+        name: checkbox
+        schema:
+          type: boolean
+      - in: query
+        name: has_choices
+        schema:
+          type: boolean
+        description: Has Choice
+      - in: query
+        name: has_units
+        schema:
+          type: boolean
+        description: Has Units
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: name
+        schema:
+          type: string
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: units
+        schema:
+          type: string
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPartParameterTemplateList'
+          description: ''
+    post:
+      operationId: part_parameter_template_create
+      description: |-
+        API endpoint for accessing a list of PartParameterTemplate objects.
+
+        - GET: Return list of PartParameterTemplate objects
+        - POST: Create a new PartParameterTemplate object
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartParameterTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartParameterTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartParameterTemplate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartParameterTemplate'
+          description: ''
+  /api/part/parameter/template/{id}/:
+    get:
+      operationId: part_parameter_template_retrieve
+      description: API endpoint for accessing the detail view for a PartParameterTemplate
+        object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartParameterTemplate'
+          description: ''
+    put:
+      operationId: part_parameter_template_update
+      description: API endpoint for accessing the detail view for a PartParameterTemplate
+        object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartParameterTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartParameterTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartParameterTemplate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartParameterTemplate'
+          description: ''
+    patch:
+      operationId: part_parameter_template_partial_update
+      description: API endpoint for accessing the detail view for a PartParameterTemplate
+        object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPartParameterTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPartParameterTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPartParameterTemplate'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartParameterTemplate'
+          description: ''
+    delete:
+      operationId: part_parameter_template_destroy
+      description: API endpoint for accessing the detail view for a PartParameterTemplate
+        object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+      responses:
+        '204':
+          description: No response body
+  /api/part/parameter/template/{id}/metadata/:
+    get:
+      operationId: part_parameter_template_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: part_parameter_template_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: part_parameter_template_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/part/related/:
+    get:
+      operationId: part_related_list
+      description: API endpoint for accessing a list of PartRelated objects.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+        description: Part
+      - in: query
+        name: part_1
+        schema:
+          type: integer
+      - in: query
+        name: part_2
+        schema:
+          type: integer
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPartRelationList'
+          description: ''
+    post:
+      operationId: part_related_create
+      description: API endpoint for accessing a list of PartRelated objects.
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartRelation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartRelation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartRelation'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartRelation'
+          description: ''
+  /api/part/related/{id}/:
+    get:
+      operationId: part_related_retrieve
+      description: API endpoint for accessing detail view of a PartRelated object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartRelation'
+          description: ''
+    put:
+      operationId: part_related_update
+      description: API endpoint for accessing detail view of a PartRelated object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartRelation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartRelation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartRelation'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartRelation'
+          description: ''
+    patch:
+      operationId: part_related_partial_update
+      description: API endpoint for accessing detail view of a PartRelated object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPartRelation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPartRelation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPartRelation'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartRelation'
+          description: ''
+    delete:
+      operationId: part_related_destroy
+      description: API endpoint for accessing detail view of a PartRelated object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+      responses:
+        '204':
+          description: No response body
+  /api/part/related/{id}/metadata/:
+    get:
+      operationId: part_related_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: part_related_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: part_related_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/part/sale-price/:
+    get:
+      operationId: part_sale_price_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPartSalePriceList'
+          description: ''
+    post:
+      operationId: part_sale_price_create
+      description: API endpoint for list view of PartSalePriceBreak model.
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartSalePrice'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartSalePrice'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartSalePrice'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartSalePrice'
+          description: ''
+  /api/part/sale-price/{id}/:
+    get:
+      operationId: part_sale_price_retrieve
+      description: Detail endpoint for PartSellPriceBreak model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartSalePrice'
+          description: ''
+    put:
+      operationId: part_sale_price_update
+      description: Detail endpoint for PartSellPriceBreak model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartSalePrice'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartSalePrice'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartSalePrice'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartSalePrice'
+          description: ''
+    patch:
+      operationId: part_sale_price_partial_update
+      description: Detail endpoint for PartSellPriceBreak model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPartSalePrice'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPartSalePrice'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPartSalePrice'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartSalePrice'
+          description: ''
+    delete:
+      operationId: part_sale_price_destroy
+      description: Detail endpoint for PartSellPriceBreak model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+      responses:
+        '204':
+          description: No response body
+  /api/part/stocktake/:
+    get:
+      operationId: part_stocktake_list
+      description: API endpoint for listing part stocktake information.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+      - in: query
+        name: user
+        schema:
+          type: integer
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stocktake
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPartStocktakeList'
+          description: ''
+    post:
+      operationId: part_stocktake_create
+      description: API endpoint for listing part stocktake information.
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartStocktake'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartStocktake'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartStocktake'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:stocktake
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartStocktake'
+          description: ''
+  /api/part/stocktake/{id}/:
+    get:
+      operationId: part_stocktake_retrieve
+      description: |-
+        Detail API endpoint for a single PartStocktake instance.
+
+        Note: Only staff (admin) users can access this endpoint.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stocktake
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartStocktake'
+          description: ''
+    put:
+      operationId: part_stocktake_update
+      description: |-
+        Detail API endpoint for a single PartStocktake instance.
+
+        Note: Only staff (admin) users can access this endpoint.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartStocktake'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartStocktake'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartStocktake'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stocktake
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartStocktake'
+          description: ''
+    patch:
+      operationId: part_stocktake_partial_update
+      description: |-
+        Detail API endpoint for a single PartStocktake instance.
+
+        Note: Only staff (admin) users can access this endpoint.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPartStocktake'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPartStocktake'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPartStocktake'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stocktake
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartStocktake'
+          description: ''
+    delete:
+      operationId: part_stocktake_destroy
+      description: |-
+        Detail API endpoint for a single PartStocktake instance.
+
+        Note: Only staff (admin) users can access this endpoint.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:stocktake
+      responses:
+        '204':
+          description: No response body
+  /api/part/stocktake/report/:
+    get:
+      operationId: part_stocktake_report_list
+      description: API endpoint for listing part stocktake report information.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stocktake
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPartStocktakeReportList'
+          description: ''
+  /api/part/stocktake/report/{id}/:
+    get:
+      operationId: part_stocktake_report_retrieve
+      description: API endpoint for detail view of a single PartStocktakeReport object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stocktake
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartStocktakeReport'
+          description: ''
+    put:
+      operationId: part_stocktake_report_update
+      description: API endpoint for detail view of a single PartStocktakeReport object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartStocktakeReport'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartStocktakeReport'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartStocktakeReport'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stocktake
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartStocktakeReport'
+          description: ''
+    patch:
+      operationId: part_stocktake_report_partial_update
+      description: API endpoint for detail view of a single PartStocktakeReport object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPartStocktakeReport'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPartStocktakeReport'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPartStocktakeReport'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stocktake
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartStocktakeReport'
+          description: ''
+    delete:
+      operationId: part_stocktake_report_destroy
+      description: API endpoint for detail view of a single PartStocktakeReport object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:stocktake
+      responses:
+        '204':
+          description: No response body
+  /api/part/stocktake/report/generate/:
+    post:
+      operationId: part_stocktake_report_generate_create
+      description: API endpoint for manually generating a new PartStocktakeReport.
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartStocktakeReportGenerate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartStocktakeReportGenerate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartStocktakeReportGenerate'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartStocktakeReportGenerate'
+          description: ''
+  /api/part/test-template/:
+    get:
+      operationId: part_test_template_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: enabled
+        schema:
+          type: boolean
+      - in: query
+        name: has_results
+        schema:
+          type: boolean
+        description: Has Results
+      - in: query
+        name: key
+        schema:
+          type: string
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+        description: Part
+      - in: query
+        name: required
+        schema:
+          type: boolean
+      - in: query
+        name: requires_attachment
+        schema:
+          type: boolean
+      - in: query
+        name: requires_value
+        schema:
+          type: boolean
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPartTestTemplateList'
+          description: ''
+    post:
+      operationId: part_test_template_create
+      description: API endpoint for listing (and creating) a PartTestTemplate.
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartTestTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartTestTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartTestTemplate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:part
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartTestTemplate'
+          description: ''
+  /api/part/test-template/{id}/:
+    get:
+      operationId: part_test_template_retrieve
+      description: Detail endpoint for PartTestTemplate model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartTestTemplate'
+          description: ''
+    put:
+      operationId: part_test_template_update
+      description: Detail endpoint for PartTestTemplate model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartTestTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartTestTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartTestTemplate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartTestTemplate'
+          description: ''
+    patch:
+      operationId: part_test_template_partial_update
+      description: Detail endpoint for PartTestTemplate model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPartTestTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPartTestTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPartTestTemplate'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartTestTemplate'
+          description: ''
+    delete:
+      operationId: part_test_template_destroy
+      description: Detail endpoint for PartTestTemplate model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:part
+      responses:
+        '204':
+          description: No response body
+  /api/part/test-template/{id}/metadata/:
+    get:
+      operationId: part_test_template_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: part_test_template_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: part_test_template_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/part/thumbs/:
+    get:
+      operationId: part_thumbs_list
+      description: API endpoint for retrieving information on available Part thumbnails.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPartThumbList'
+          description: ''
+  /api/part/thumbs/{id}/:
+    get:
+      operationId: part_thumbs_retrieve
+      description: API endpoint for updating Part thumbnails.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:part
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartThumbSerializerUpdate'
+          description: ''
+    put:
+      operationId: part_thumbs_update
+      description: API endpoint for updating Part thumbnails.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PartThumbSerializerUpdate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PartThumbSerializerUpdate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PartThumbSerializerUpdate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartThumbSerializerUpdate'
+          description: ''
+    patch:
+      operationId: part_thumbs_partial_update
+      description: API endpoint for updating Part thumbnails.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - part
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPartThumbSerializerUpdate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPartThumbSerializerUpdate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPartThumbSerializerUpdate'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:part
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PartThumbSerializerUpdate'
+          description: ''
+  /api/plugins/:
+    get:
+      operationId: plugins_list
+      description: |-
+        API endpoint for list of PluginConfig objects.
+
+        - GET: Return a list of all PluginConfig objects
+      parameters:
+      - in: query
+        name: active
+        schema:
+          type: boolean
+      - in: query
+        name: builtin
+        schema:
+          type: boolean
+        description: Builtin
+      - in: query
+        name: installed
+        schema:
+          type: boolean
+        description: Installed
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: mandatory
+        schema:
+          type: boolean
+        description: Mandatory
+      - in: query
+        name: mixin
+        schema:
+          type: string
+        description: Mixin
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: sample
+        schema:
+          type: boolean
+        description: Sample
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - plugins
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPluginConfigList'
+          description: ''
+  /api/plugins/{plugin}/:
+    get:
+      operationId: plugins_retrieve
+      description: |-
+        API detail endpoint for PluginConfig object.
+
+        get:
+        Return a single PluginConfig object
+
+        post:
+        Update a PluginConfig
+
+        delete:
+        Remove a PluginConfig
+      parameters:
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PluginConfig'
+          description: ''
+    delete:
+      operationId: plugins_destroy
+      description: |-
+        Handle DELETE request for a PluginConfig instance.
+
+        We only allow plugin deletion if the plugin is not active.
+      parameters:
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:superuser
+      responses:
+        '204':
+          description: No response body
+  /api/plugins/{plugin}/activate/:
+    put:
+      operationId: plugins_activate_update
+      description: |-
+        Endpoint for activating a plugin.
+
+        - PATCH: Activate a plugin
+
+        Pass a boolean value for the 'active' field.
+        If not provided, it is assumed to be True,
+        and the plugin will be activated.
+      parameters:
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PluginActivate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PluginActivate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PluginActivate'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:superuser
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PluginActivate'
+          description: ''
+    patch:
+      operationId: plugins_activate_partial_update
+      description: |-
+        Endpoint for activating a plugin.
+
+        - PATCH: Activate a plugin
+
+        Pass a boolean value for the 'active' field.
+        If not provided, it is assumed to be True,
+        and the plugin will be activated.
+      parameters:
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPluginActivate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPluginActivate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPluginActivate'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:superuser
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PluginActivate'
+          description: ''
+  /api/plugins/{plugin}/admin/:
+    get:
+      operationId: plugins_admin_retrieve
+      description: |-
+        Endpoint for viewing admin integration plugin details.
+
+        This endpoint is used to view the available admin integration options for a plugin.
+      parameters:
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PluginAdminDetail'
+          description: ''
+  /api/plugins/{plugin}/metadata/:
+    get:
+      operationId: plugins_metadata_retrieve
+      description: Metadata API endpoint for the PluginConfig model.
+      parameters:
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: plugins_metadata_update
+      description: Metadata API endpoint for the PluginConfig model.
+      parameters:
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: plugins_metadata_partial_update
+      description: Metadata API endpoint for the PluginConfig model.
+      parameters:
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/plugins/{plugin}/settings/:
+    get:
+      operationId: plugins_settings_list
+      description: Get all settings for a plugin config.
+      parameters:
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/PluginSetting'
+          description: ''
+  /api/plugins/{plugin}/settings/{key}/:
+    get:
+      operationId: plugins_settings_retrieve
+      description: |-
+        Detail endpoint for a plugin-specific setting.
+
+        Note that these cannot be created or deleted via the API
+      parameters:
+      - in: path
+        name: key
+        schema:
+          type: string
+          pattern: ^\w+$
+        required: true
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PluginSetting'
+          description: ''
+    put:
+      operationId: plugins_settings_update
+      description: |-
+        Detail endpoint for a plugin-specific setting.
+
+        Note that these cannot be created or deleted via the API
+      parameters:
+      - in: path
+        name: key
+        schema:
+          type: string
+          pattern: ^\w+$
+        required: true
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PluginSetting'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PluginSetting'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PluginSetting'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PluginSetting'
+          description: ''
+    patch:
+      operationId: plugins_settings_partial_update
+      description: |-
+        Detail endpoint for a plugin-specific setting.
+
+        Note that these cannot be created or deleted via the API
+      parameters:
+      - in: path
+        name: key
+        schema:
+          type: string
+          pattern: ^\w+$
+        required: true
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPluginSetting'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPluginSetting'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPluginSetting'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PluginSetting'
+          description: ''
+  /api/plugins/{plugin}/uninstall/:
+    put:
+      operationId: plugins_uninstall_update
+      description: Endpoint for uninstalling a single plugin.
+      parameters:
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PluginUninstall'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PluginUninstall'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PluginUninstall'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:superuser
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PluginUninstall'
+          description: ''
+    patch:
+      operationId: plugins_uninstall_partial_update
+      description: Endpoint for uninstalling a single plugin.
+      parameters:
+      - in: path
+        name: plugin
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPluginUninstall'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPluginUninstall'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPluginUninstall'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:superuser
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PluginUninstall'
+          description: ''
+  /api/plugins/install/:
+    post:
+      operationId: plugins_install_create
+      description: Endpoint for installing a new plugin.
+      tags:
+      - plugins
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PluginConfigInstall'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PluginConfigInstall'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PluginConfigInstall'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PluginConfigInstall'
+          description: ''
+  /api/plugins/reload/:
+    post:
+      operationId: plugins_reload_create
+      description: Endpoint for reloading all plugins.
+      tags:
+      - plugins
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PluginReload'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PluginReload'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PluginReload'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:superuser
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PluginReload'
+          description: ''
+  /api/plugins/settings/:
+    get:
+      operationId: plugins_settings_list_all
+      description: |-
+        List endpoint for all plugin related settings.
+
+        - read only
+        - only accessible by staff users
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - in: query
+        name: plugin__active
+        schema:
+          type: boolean
+      - in: query
+        name: plugin__key
+        schema:
+          type: string
+      tags:
+      - plugins
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPluginSettingList'
+          description: ''
+  /api/plugins/status/:
+    get:
+      operationId: plugins_status_retrieve
+      description: Show plugin registry status information.
+      tags:
+      - plugins
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:superuser
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PluginRegistryStatus'
+          description: ''
+  /api/plugins/ui/features/{feature}/:
+    get:
+      operationId: plugins_ui_features_list
+      description: Show available plugin ui features.
+      parameters:
+      - in: path
+        name: feature
+        schema:
+          type: string
+        required: true
+      tags:
+      - plugins
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/PluginUIFeature'
+          description: ''
+  /api/project-code/:
+    get:
+      operationId: project_code_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - project-code
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedProjectCodeList'
+          description: ''
+    post:
+      operationId: project_code_create
+      description: List view for all project codes.
+      tags:
+      - project-code
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ProjectCode'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ProjectCode'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ProjectCode'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ProjectCode'
+          description: ''
+  /api/project-code/{id}/:
+    get:
+      operationId: project_code_retrieve
+      description: Detail view for a particular project code.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - project-code
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ProjectCode'
+          description: ''
+    put:
+      operationId: project_code_update
+      description: Detail view for a particular project code.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - project-code
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ProjectCode'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ProjectCode'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ProjectCode'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ProjectCode'
+          description: ''
+    patch:
+      operationId: project_code_partial_update
+      description: Detail view for a particular project code.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - project-code
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedProjectCode'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedProjectCode'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedProjectCode'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ProjectCode'
+          description: ''
+    delete:
+      operationId: project_code_destroy
+      description: Detail view for a particular project code.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - project-code
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+  /api/project-code/{id}/metadata/:
+    get:
+      operationId: project_code_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - project-code
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: project_code_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - project-code
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: project_code_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - project-code
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/report/asset/:
+    get:
+      operationId: report_asset_list
+      description: API endpoint for listing ReportAsset objects.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      tags:
+      - report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedReportAssetList'
+          description: ''
+    post:
+      operationId: report_asset_create
+      description: API endpoint for listing ReportAsset objects.
+      tags:
+      - report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReportAsset'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReportAsset'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReportAsset'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReportAsset'
+          description: ''
+  /api/report/asset/{id}/:
+    get:
+      operationId: report_asset_retrieve
+      description: API endpoint for a single ReportAsset object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReportAsset'
+          description: ''
+    put:
+      operationId: report_asset_update
+      description: API endpoint for a single ReportAsset object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReportAsset'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReportAsset'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReportAsset'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReportAsset'
+          description: ''
+    patch:
+      operationId: report_asset_partial_update
+      description: API endpoint for a single ReportAsset object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedReportAsset'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedReportAsset'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedReportAsset'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReportAsset'
+          description: ''
+    delete:
+      operationId: report_asset_destroy
+      description: API endpoint for a single ReportAsset object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+  /api/report/print/:
+    post:
+      operationId: report_print_create
+      description: POST action for printing a report.
+      tags:
+      - report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReportPrint'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReportPrint'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReportPrint'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReportPrint'
+          description: ''
+  /api/report/snippet/:
+    get:
+      operationId: report_snippet_list
+      description: API endpoint for listing ReportSnippet objects.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      tags:
+      - report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedReportSnippetList'
+          description: ''
+    post:
+      operationId: report_snippet_create
+      description: API endpoint for listing ReportSnippet objects.
+      tags:
+      - report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReportSnippet'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReportSnippet'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReportSnippet'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReportSnippet'
+          description: ''
+  /api/report/snippet/{id}/:
+    get:
+      operationId: report_snippet_retrieve
+      description: API endpoint for a single ReportSnippet object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReportSnippet'
+          description: ''
+    put:
+      operationId: report_snippet_update
+      description: API endpoint for a single ReportSnippet object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReportSnippet'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReportSnippet'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReportSnippet'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReportSnippet'
+          description: ''
+    patch:
+      operationId: report_snippet_partial_update
+      description: API endpoint for a single ReportSnippet object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedReportSnippet'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedReportSnippet'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedReportSnippet'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReportSnippet'
+          description: ''
+    delete:
+      operationId: report_snippet_destroy
+      description: API endpoint for a single ReportSnippet object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+  /api/report/template/:
+    get:
+      operationId: report_template_list
+      description: API endpoint for viewing list of ReportTemplate objects.
+      parameters:
+      - in: query
+        name: enabled
+        schema:
+          type: boolean
+      - in: query
+        name: items
+        schema:
+          type: string
+        description: Items
+      - in: query
+        name: landscape
+        schema:
+          type: boolean
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: model_type
+        schema:
+          type: string
+          enum:
+          - build
+          - buildline
+          - part
+          - purchaseorder
+          - returnorder
+          - salesorder
+          - salesordershipment
+          - stockitem
+          - stocklocation
+        description: |-
+          Model Type
+
+          * `build` - Build Order
+          * `buildline` - Build Order Line Item
+          * `purchaseorder` - Purchase Order
+          * `salesorder` - Sales Order
+          * `salesordershipment` - Sales Order Shipment
+          * `returnorder` - Return Order
+          * `part` - Part
+          * `stockitem` - Stock Item
+          * `stocklocation` - Stock Location
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedReportTemplateList'
+          description: ''
+    post:
+      operationId: report_template_create
+      description: API endpoint for viewing list of ReportTemplate objects.
+      tags:
+      - report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReportTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReportTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReportTemplate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReportTemplate'
+          description: ''
+  /api/report/template/{id}/:
+    get:
+      operationId: report_template_retrieve
+      description: Detail API endpoint for report template model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReportTemplate'
+          description: ''
+    put:
+      operationId: report_template_update
+      description: Detail API endpoint for report template model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReportTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReportTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReportTemplate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReportTemplate'
+          description: ''
+    patch:
+      operationId: report_template_partial_update
+      description: Detail API endpoint for report template model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedReportTemplate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedReportTemplate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedReportTemplate'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReportTemplate'
+          description: ''
+    delete:
+      operationId: report_template_destroy
+      description: Detail API endpoint for report template model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+  /api/report/template/{id}/metadata/:
+    get:
+      operationId: report_template_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: report_template_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: report_template_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - report
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:admin
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/search/:
+    post:
+      operationId: search_create
+      description: Perform search query against available models.
+      tags:
+      - search
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/APISearchView'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/APISearchView'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/APISearchView'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APISearchView'
+          description: ''
+  /api/selection/:
+    get:
+      operationId: selection_list
+      description: List view for SelectionList objects.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      tags:
+      - selection
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedSelectionListList'
+          description: ''
+    post:
+      operationId: selection_create
+      description: List view for SelectionList objects.
+      tags:
+      - selection
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SelectionList'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SelectionList'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SelectionList'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SelectionList'
+          description: ''
+  /api/selection/{id}/:
+    get:
+      operationId: selection_retrieve
+      description: Detail view for a SelectionList object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - selection
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SelectionList'
+          description: ''
+    put:
+      operationId: selection_update
+      description: Detail view for a SelectionList object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - selection
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SelectionList'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SelectionList'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SelectionList'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SelectionList'
+          description: ''
+    patch:
+      operationId: selection_partial_update
+      description: Detail view for a SelectionList object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - selection
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedSelectionList'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedSelectionList'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedSelectionList'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SelectionList'
+          description: ''
+    delete:
+      operationId: selection_destroy
+      description: Detail view for a SelectionList object.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - selection
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+  /api/selection/{id}/entry/:
+    get:
+      operationId: selection_entry_list
+      description: List view for SelectionEntry objects.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      tags:
+      - selection
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedSelectionEntryList'
+          description: ''
+    post:
+      operationId: selection_entry_create
+      description: List view for SelectionEntry objects.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - selection
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SelectionEntry'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SelectionEntry'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SelectionEntry'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SelectionEntry'
+          description: ''
+  /api/selection/{id}/entry/{entrypk}/:
+    get:
+      operationId: selection_entry_retrieve
+      description: Detail view for a SelectionEntry object.
+      parameters:
+      - in: path
+        name: entrypk
+        schema:
+          type: integer
+        required: true
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - selection
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SelectionEntry'
+          description: ''
+    put:
+      operationId: selection_entry_update
+      description: Detail view for a SelectionEntry object.
+      parameters:
+      - in: path
+        name: entrypk
+        schema:
+          type: integer
+        required: true
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - selection
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SelectionEntry'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SelectionEntry'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SelectionEntry'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SelectionEntry'
+          description: ''
+    patch:
+      operationId: selection_entry_partial_update
+      description: Detail view for a SelectionEntry object.
+      parameters:
+      - in: path
+        name: entrypk
+        schema:
+          type: integer
+        required: true
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - selection
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedSelectionEntry'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedSelectionEntry'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedSelectionEntry'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SelectionEntry'
+          description: ''
+    delete:
+      operationId: selection_entry_destroy
+      description: Detail view for a SelectionEntry object.
+      parameters:
+      - in: path
+        name: entrypk
+        schema:
+          type: integer
+        required: true
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - selection
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+  /api/settings/global/:
+    get:
+      operationId: settings_global_list
+      description: API endpoint for accessing a list of global settings objects.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - settings
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedGlobalSettingsList'
+          description: ''
+  /api/settings/global/{key}/:
+    get:
+      operationId: settings_global_retrieve
+      description: |-
+        Detail view for an individual "global setting" object.
+
+        - User must have 'staff' status to view / edit
+      parameters:
+      - in: path
+        name: key
+        schema:
+          type: string
+          pattern: ^\w+$
+        required: true
+      tags:
+      - settings
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GlobalSettings'
+          description: ''
+    put:
+      operationId: settings_global_update
+      description: |-
+        Detail view for an individual "global setting" object.
+
+        - User must have 'staff' status to view / edit
+      parameters:
+      - in: path
+        name: key
+        schema:
+          type: string
+          pattern: ^\w+$
+        required: true
+      tags:
+      - settings
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/GlobalSettings'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/GlobalSettings'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/GlobalSettings'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GlobalSettings'
+          description: ''
+    patch:
+      operationId: settings_global_partial_update
+      description: |-
+        Detail view for an individual "global setting" object.
+
+        - User must have 'staff' status to view / edit
+      parameters:
+      - in: path
+        name: key
+        schema:
+          type: string
+          pattern: ^\w+$
+        required: true
+      tags:
+      - settings
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedGlobalSettings'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedGlobalSettings'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedGlobalSettings'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GlobalSettings'
+          description: ''
+  /api/settings/notification/:
+    get:
+      operationId: settings_notification_list
+      description: API endpoint for accessing a list of notification user settings
+        objects.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - settings
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedNotificationUserSettingList'
+          description: ''
+  /api/settings/notification/{id}/:
+    get:
+      operationId: settings_notification_retrieve
+      description: |-
+        Detail view for an individual "notification user setting" object.
+
+        - User can only view / edit settings their own settings objects
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - settings
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NotificationUserSetting'
+          description: ''
+    put:
+      operationId: settings_notification_update
+      description: |-
+        Detail view for an individual "notification user setting" object.
+
+        - User can only view / edit settings their own settings objects
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - settings
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/NotificationUserSetting'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/NotificationUserSetting'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/NotificationUserSetting'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NotificationUserSetting'
+          description: ''
+    patch:
+      operationId: settings_notification_partial_update
+      description: |-
+        Detail view for an individual "notification user setting" object.
+
+        - User can only view / edit settings their own settings objects
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - settings
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedNotificationUserSetting'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedNotificationUserSetting'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedNotificationUserSetting'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NotificationUserSetting'
+          description: ''
+  /api/settings/user/:
+    get:
+      operationId: settings_user_list
+      description: API endpoint for accessing a list of user settings objects.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - settings
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedUserSettingsList'
+          description: ''
+  /api/settings/user/{key}/:
+    get:
+      operationId: settings_user_retrieve
+      description: |-
+        Detail view for an individual "user setting" object.
+
+        - User can only view / edit settings their own settings objects
+      parameters:
+      - in: path
+        name: key
+        schema:
+          type: string
+          pattern: ^\w+$
+        required: true
+      tags:
+      - settings
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserSettings'
+          description: ''
+    put:
+      operationId: settings_user_update
+      description: |-
+        Detail view for an individual "user setting" object.
+
+        - User can only view / edit settings their own settings objects
+      parameters:
+      - in: path
+        name: key
+        schema:
+          type: string
+          pattern: ^\w+$
+        required: true
+      tags:
+      - settings
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserSettings'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserSettings'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserSettings'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserSettings'
+          description: ''
+    patch:
+      operationId: settings_user_partial_update
+      description: |-
+        Detail view for an individual "user setting" object.
+
+        - User can only view / edit settings their own settings objects
+      parameters:
+      - in: path
+        name: key
+        schema:
+          type: string
+          pattern: ^\w+$
+        required: true
+      tags:
+      - settings
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedUserSettings'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedUserSettings'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedUserSettings'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserSettings'
+          description: ''
+  /api/stock/:
+    get:
+      operationId: stock_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: IPN
+        schema:
+          type: string
+        description: Part IPN (case insensitive)
+      - in: query
+        name: IPN_contains
+        schema:
+          type: string
+        description: Part IPN contains (case insensitive)
+      - in: query
+        name: IPN_regex
+        schema:
+          type: string
+        description: Part IPN (regex)
+      - in: query
+        name: active
+        schema:
+          type: boolean
+        description: Active
+      - in: query
+        name: allocated
+        schema:
+          type: boolean
+        description: Is Allocated
+      - in: query
+        name: ancestor
+        schema:
+          type: integer
+      - in: query
+        name: assembly
+        schema:
+          type: boolean
+        description: Assembly
+      - in: query
+        name: available
+        schema:
+          type: boolean
+        description: Available
+      - in: query
+        name: batch
+        schema:
+          type: string
+        description: Batch code filter (case insensitive)
+      - in: query
+        name: batch_regex
+        schema:
+          type: string
+        description: Batch code filter (regex)
+      - in: query
+        name: belongs_to
+        schema:
+          type: integer
+      - in: query
+        name: bom_item
+        schema:
+          type: integer
+      - in: query
+        name: build
+        schema:
+          type: integer
+      - in: query
+        name: category
+        schema:
+          type: integer
+      - in: query
+        name: company
+        schema:
+          type: integer
+      - in: query
+        name: consumed
+        schema:
+          type: boolean
+        description: Consumed by Build Order
+      - in: query
+        name: consumed_by
+        schema:
+          type: integer
+      - in: query
+        name: customer
+        schema:
+          type: integer
+      - in: query
+        name: depleted
+        schema:
+          type: boolean
+        description: Depleted
+      - in: query
+        name: expired
+        schema:
+          type: boolean
+        description: Expired
+      - in: query
+        name: expiry_after
+        schema:
+          type: string
+          format: date
+        description: Expiry date after
+      - in: query
+        name: expiry_before
+        schema:
+          type: string
+          format: date
+        description: Expiry date before
+      - in: query
+        name: external
+        schema:
+          type: boolean
+        description: External Location
+      - in: query
+        name: has_batch
+        schema:
+          type: boolean
+        description: Has batch code
+      - in: query
+        name: has_child_items
+        schema:
+          type: boolean
+        description: Has child items
+      - in: query
+        name: has_installed_items
+        schema:
+          type: boolean
+        description: Has installed items
+      - in: query
+        name: has_purchase_price
+        schema:
+          type: boolean
+        description: Has purchase price
+      - in: query
+        name: in_stock
+        schema:
+          type: boolean
+        description: In Stock
+      - in: query
+        name: include_variants
+        schema:
+          type: boolean
+        description: Include Variants
+      - in: query
+        name: installed
+        schema:
+          type: boolean
+        description: Installed in other stock item
+      - in: query
+        name: is_building
+        schema:
+          type: boolean
+        description: In production
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: manufacturer
+        schema:
+          type: integer
+      - in: query
+        name: max_stock
+        schema:
+          type: number
+        description: Maximum stock
+      - in: query
+        name: min_stock
+        schema:
+          type: number
+        description: Minimum stock
+      - in: query
+        name: name
+        schema:
+          type: string
+        description: Part name (case insensitive)
+      - in: query
+        name: name_contains
+        schema:
+          type: string
+        description: Part name contains (case insensitive)
+      - in: query
+        name: name_regex
+        schema:
+          type: string
+        description: Part name (regex)
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+        description: Part
+      - in: query
+        name: part_tree
+        schema:
+          type: integer
+      - in: query
+        name: purchase_order
+        schema:
+          type: integer
+      - in: query
+        name: salable
+        schema:
+          type: boolean
+        description: Salable
+      - in: query
+        name: sales_order
+        schema:
+          type: integer
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: sent_to_customer
+        schema:
+          type: boolean
+        description: Sent to customer
+      - in: query
+        name: serial
+        schema:
+          type: string
+        description: Serial number
+      - in: query
+        name: serial_gte
+        schema:
+          type: integer
+        description: Serial number GTE
+      - in: query
+        name: serial_lte
+        schema:
+          type: integer
+        description: Serial number LTE
+      - in: query
+        name: serialized
+        schema:
+          type: boolean
+        description: Has serial number
+      - in: query
+        name: stale
+        schema:
+          type: boolean
+        description: Stale
+      - in: query
+        name: status
+        schema:
+          type: integer
+        description: Status Code
+      - in: query
+        name: stocktake_after
+        schema:
+          type: string
+          format: date
+        description: Stocktake After
+      - in: query
+        name: stocktake_before
+        schema:
+          type: string
+          format: date
+        description: Stocktake Before
+      - in: query
+        name: supplier
+        schema:
+          type: integer
+        description: Supplier
+      - in: query
+        name: supplier_part
+        schema:
+          type: integer
+      - in: query
+        name: tags__name
+        schema:
+          type: string
+      - in: query
+        name: tags__slug
+        schema:
+          type: string
+      - in: query
+        name: tracked
+        schema:
+          type: boolean
+        description: Tracked
+      - in: query
+        name: updated_after
+        schema:
+          type: string
+          format: date
+        description: Updated after
+      - in: query
+        name: updated_before
+        schema:
+          type: string
+          format: date
+        description: Updated before
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedStockItemList'
+          description: ''
+    post:
+      operationId: stock_create
+      description: |-
+        API endpoint for list view of Stock objects.
+
+        - GET: Return a list of all StockItem objects (with optional query filters)
+        - POST: Create a new StockItem
+        - DELETE: Delete multiple StockItem objects
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/StockItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/StockItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/StockItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:stock
+        - r:add:build
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockItem'
+          description: ''
+    delete:
+      operationId: stock_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:stock
+        - r:delete:build
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/stock/{id}/:
+    get:
+      operationId: stock_retrieve
+      description: API detail endpoint for a single StockItem instance.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockItem'
+          description: ''
+    put:
+      operationId: stock_update
+      description: API detail endpoint for a single StockItem instance.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/StockItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/StockItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/StockItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockItem'
+          description: ''
+    patch:
+      operationId: stock_partial_update
+      description: API detail endpoint for a single StockItem instance.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedStockItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedStockItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedStockItem'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockItem'
+          description: ''
+    delete:
+      operationId: stock_destroy
+      description: API detail endpoint for a single StockItem instance.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:stock
+        - r:delete:build
+      responses:
+        '204':
+          description: No response body
+  /api/stock/{id}/convert/:
+    post:
+      operationId: stock_convert_create
+      description: API endpoint for converting a stock item to a variant part.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ConvertStockItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ConvertStockItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ConvertStockItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ConvertStockItem'
+          description: ''
+  /api/stock/{id}/install/:
+    post:
+      operationId: stock_install_create
+      description: |-
+        API endpoint for installing a particular stock item into this stock item.
+
+        - stock_item.part must be in the BOM for this part
+        - stock_item must currently be "in stock"
+        - stock_item must be serialized (and not belong to another item)
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/InstallStockItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/InstallStockItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/InstallStockItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/InstallStockItem'
+          description: ''
+  /api/stock/{id}/metadata/:
+    get:
+      operationId: stock_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: stock_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: stock_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/stock/{id}/return/:
+    post:
+      operationId: stock_return_create
+      description: API endpoint for returning a stock item from a customer.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ReturnStockItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ReturnStockItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ReturnStockItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ReturnStockItem'
+          description: ''
+  /api/stock/{id}/serial-numbers/:
+    get:
+      operationId: stock_serial_numbers_retrieve
+      description: |-
+        View extra serial number information for a given stock item.
+
+        Provides information on the "previous" and "next" stock items,
+        based on the serial number of the given stock item.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockItemSerialNumbers'
+          description: ''
+  /api/stock/{id}/serialize/:
+    post:
+      operationId: stock_serialize_create
+      description: API endpoint for serializing a stock item.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/SerializeStockItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/SerializeStockItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/SerializeStockItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/SerializeStockItem'
+          description: ''
+  /api/stock/{id}/uninstall/:
+    post:
+      operationId: stock_uninstall_create
+      description: API endpoint for removing (uninstalling) items from this item.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UninstallStockItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UninstallStockItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UninstallStockItem'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UninstallStockItem'
+          description: ''
+  /api/stock/add/:
+    post:
+      operationId: stock_add_create
+      description: Endpoint for adding a quantity of stock to an existing StockItem.
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/StockAdd'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/StockAdd'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/StockAdd'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockAdd'
+          description: ''
+  /api/stock/assign/:
+    post:
+      operationId: stock_assign_create
+      description: API endpoint for assigning stock to a particular customer.
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/StockAssignment'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/StockAssignment'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/StockAssignment'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockAssignment'
+          description: ''
+  /api/stock/change_status/:
+    post:
+      operationId: stock_change_status_create
+      description: API endpoint to change the status code of multiple StockItem objects.
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/StockChangeStatus'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/StockChangeStatus'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/StockChangeStatus'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockChangeStatus'
+          description: ''
+  /api/stock/count/:
+    post:
+      operationId: stock_count_create
+      description: Endpoint for counting stock (performing a stocktake).
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/StockCount'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/StockCount'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/StockCount'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockCount'
+          description: ''
+  /api/stock/location/:
+    get:
+      operationId: stock_location_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: cascade
+        schema:
+          type: boolean
+        description: Include sub-locations in filtered results
+      - in: query
+        name: depth
+        schema:
+          type: number
+        description: Filter by location depth
+      - in: query
+        name: external
+        schema:
+          type: boolean
+      - in: query
+        name: has_location_type
+        schema:
+          type: boolean
+        description: has_location_type
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: location_type
+        schema:
+          type: integer
+      - in: query
+        name: name
+        schema:
+          type: string
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: parent
+        schema:
+          type: integer
+        description: Filter by parent location
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: structural
+        schema:
+          type: boolean
+      - in: query
+        name: top_level
+        schema:
+          type: boolean
+        description: Filter by top-level locations
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock_location
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedLocationList'
+          description: ''
+    post:
+      operationId: stock_location_create
+      description: |-
+        API endpoint for list view of StockLocation objects.
+
+        - GET: Return list of StockLocation objects
+        - POST: Create a new StockLocation
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Location'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Location'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Location'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:stock_location
+        - r:add:build
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Location'
+          description: ''
+    put:
+      operationId: stock_location_bulk_update
+      description: |-
+        Perform a PUT operation against this list endpoint.
+
+        Simply redirects to the PATCH method.
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Location'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Location'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Location'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock_location
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Location'
+          description: ''
+    patch:
+      operationId: stock_location_bulk_partial_update
+      description: |-
+        Perform a PATCH operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support PATCH,
+        so this method is provided as a custom implementation.
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedLocation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedLocation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedLocation'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock_location
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Location'
+          description: ''
+  /api/stock/location-type/:
+    get:
+      operationId: stock_location_type_list
+      description: |-
+        API endpoint for a list of StockLocationType objects.
+
+        - GET: Return a list of all StockLocationType objects
+        - POST: Create a StockLocationType
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock_location
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedStockLocationTypeList'
+          description: ''
+    post:
+      operationId: stock_location_type_create
+      description: |-
+        API endpoint for a list of StockLocationType objects.
+
+        - GET: Return a list of all StockLocationType objects
+        - POST: Create a StockLocationType
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/StockLocationType'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/StockLocationType'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/StockLocationType'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:stock_location
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockLocationType'
+          description: ''
+  /api/stock/location-type/{id}/:
+    get:
+      operationId: stock_location_type_retrieve
+      description: |-
+        API detail endpoint for a StockLocationType object.
+
+        - GET: return a single StockLocationType
+        - PUT: update a StockLocationType
+        - PATCH: partial update a StockLocationType
+        - DELETE: delete a StockLocationType
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock_location
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockLocationType'
+          description: ''
+    put:
+      operationId: stock_location_type_update
+      description: |-
+        API detail endpoint for a StockLocationType object.
+
+        - GET: return a single StockLocationType
+        - PUT: update a StockLocationType
+        - PATCH: partial update a StockLocationType
+        - DELETE: delete a StockLocationType
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/StockLocationType'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/StockLocationType'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/StockLocationType'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock_location
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockLocationType'
+          description: ''
+    patch:
+      operationId: stock_location_type_partial_update
+      description: |-
+        API detail endpoint for a StockLocationType object.
+
+        - GET: return a single StockLocationType
+        - PUT: update a StockLocationType
+        - PATCH: partial update a StockLocationType
+        - DELETE: delete a StockLocationType
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedStockLocationType'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedStockLocationType'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedStockLocationType'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock_location
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockLocationType'
+          description: ''
+    delete:
+      operationId: stock_location_type_destroy
+      description: |-
+        API detail endpoint for a StockLocationType object.
+
+        - GET: return a single StockLocationType
+        - PUT: update a StockLocationType
+        - PATCH: partial update a StockLocationType
+        - DELETE: delete a StockLocationType
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:stock_location
+      responses:
+        '204':
+          description: No response body
+  /api/stock/location-type/{id}/metadata/:
+    get:
+      operationId: stock_location_type_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock_location
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: stock_location_type_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock_location
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: stock_location_type_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock_location
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/stock/location/{id}/:
+    get:
+      operationId: stock_location_retrieve
+      description: Custom get method to pass kwargs.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock_location
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Location'
+          description: ''
+    put:
+      operationId: stock_location_update
+      description: Custom put method to pass kwargs.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Location'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Location'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Location'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock_location
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Location'
+          description: ''
+    patch:
+      operationId: stock_location_partial_update
+      description: Custom patch method to pass kwargs.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedLocation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedLocation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedLocation'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock_location
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Location'
+          description: ''
+    delete:
+      operationId: stock_location_destroy
+      description: Custom delete method to pass kwargs.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:stock_location
+        - r:delete:build
+      responses:
+        '204':
+          description: No response body
+  /api/stock/location/{id}/metadata/:
+    get:
+      operationId: stock_location_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock_location
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: stock_location_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock_location
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: stock_location_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock_location
+        - r:change:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/stock/location/tree/:
+    get:
+      operationId: stock_location_tree_list
+      description: API endpoint for accessing a list of StockLocation objects, ready
+        for rendering as a tree.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock_location
+        - r:view:build
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedLocationTreeList'
+          description: ''
+  /api/stock/merge/:
+    post:
+      operationId: stock_merge_create
+      description: API endpoint for merging multiple stock items.
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/StockMerge'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/StockMerge'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/StockMerge'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockMerge'
+          description: ''
+  /api/stock/remove/:
+    post:
+      operationId: stock_remove_create
+      description: Endpoint for removing a quantity of stock from an existing StockItem.
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/StockRemove'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/StockRemove'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/StockRemove'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockRemove'
+          description: ''
+  /api/stock/status/:
+    get:
+      operationId: stock_status_retrieve
+      description: Retrieve information about a specific status code
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GenericStateClass'
+          description: ''
+        '400':
+          description: Invalid request
+  /api/stock/test/:
+    get:
+      operationId: stock_test_list
+      description: API endpoint for listing (and creating) a StockItemTestResult object.
+      parameters:
+      - in: query
+        name: build
+        schema:
+          type: integer
+        description: Build
+      - in: query
+        name: enabled
+        schema:
+          type: boolean
+        description: Enabled
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: part
+        schema:
+          type: integer
+        description: Part
+      - in: query
+        name: required
+        schema:
+          type: boolean
+        description: Required
+      - in: query
+        name: result
+        schema:
+          type: boolean
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: template
+        schema:
+          type: integer
+      - in: query
+        name: test
+        schema:
+          type: string
+        description: Test name (case insensitive)
+      - in: query
+        name: user
+        schema:
+          type: integer
+      - in: query
+        name: value
+        schema:
+          type: string
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedStockItemTestResultList'
+          description: ''
+    post:
+      operationId: stock_test_create
+      description: API endpoint for listing (and creating) a StockItemTestResult object.
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/StockItemTestResult'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/StockItemTestResult'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/StockItemTestResult'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:add:stock
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockItemTestResult'
+          description: ''
+    delete:
+      operationId: stock_test_bulk_destroy
+      description: |-
+        Perform a DELETE operation against this list endpoint.
+
+        Note that the typical DRF list endpoint does not support DELETE,
+        so this method is provided as a custom implementation.
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:stock
+      responses:
+        '204':
+          description: No response body
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/BulkRequest'
+        required: true
+  /api/stock/test/{id}/:
+    get:
+      operationId: stock_test_retrieve
+      description: Detail endpoint for StockItemTestResult.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockItemTestResult'
+          description: ''
+    put:
+      operationId: stock_test_update
+      description: Detail endpoint for StockItemTestResult.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/StockItemTestResult'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/StockItemTestResult'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/StockItemTestResult'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockItemTestResult'
+          description: ''
+    patch:
+      operationId: stock_test_partial_update
+      description: Detail endpoint for StockItemTestResult.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedStockItemTestResult'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedStockItemTestResult'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedStockItemTestResult'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockItemTestResult'
+          description: ''
+    delete:
+      operationId: stock_test_destroy
+      description: Detail endpoint for StockItemTestResult.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:delete:stock
+      responses:
+        '204':
+          description: No response body
+  /api/stock/test/{id}/metadata/:
+    get:
+      operationId: stock_test_metadata_retrieve
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    put:
+      operationId: stock_test_metadata_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Metadata'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+    patch:
+      operationId: stock_test_metadata_partial_update
+      description: Generic API endpoint for reading and editing metadata for a model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMetadata'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:change:stock
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Metadata'
+          description: ''
+  /api/stock/track/:
+    get:
+      operationId: stock_track_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - in: query
+        name: item
+        schema:
+          type: integer
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: user
+        schema:
+          type: integer
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedStockTrackingList'
+          description: ''
+  /api/stock/track/{id}/:
+    get:
+      operationId: stock_track_retrieve
+      description: Detail API endpoint for StockItemTracking model.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - r:view:stock
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockTracking'
+          description: ''
+  /api/stock/track/status/:
+    get:
+      operationId: stock_track_status_retrieve
+      description: Retrieve information about a specific status code
+      tags:
+      - stock
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GenericStateClass'
+          description: ''
+        '400':
+          description: Invalid request
+  /api/stock/transfer/:
+    post:
+      operationId: stock_transfer_create
+      description: API endpoint for performing stock movements.
+      tags:
+      - stock
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/StockTransfer'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/StockTransfer'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/StockTransfer'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/StockTransfer'
+          description: ''
+  /api/units/:
+    get:
+      operationId: units_list
+      description: Override the GET method to determine export options.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - units
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedCustomUnitList'
+          description: ''
+    post:
+      operationId: units_create
+      description: List view for custom units.
+      tags:
+      - units
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/CustomUnit'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/CustomUnit'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/CustomUnit'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CustomUnit'
+          description: ''
+  /api/units/{id}/:
+    get:
+      operationId: units_retrieve
+      description: Detail view for a particular custom unit.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - units
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CustomUnit'
+          description: ''
+    put:
+      operationId: units_update
+      description: Detail view for a particular custom unit.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - units
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/CustomUnit'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/CustomUnit'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/CustomUnit'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CustomUnit'
+          description: ''
+    patch:
+      operationId: units_partial_update
+      description: Detail view for a particular custom unit.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - units
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedCustomUnit'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedCustomUnit'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedCustomUnit'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CustomUnit'
+          description: ''
+    delete:
+      operationId: units_destroy
+      description: Detail view for a particular custom unit.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - units
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+  /api/units/all/:
+    get:
+      operationId: units_all_retrieve
+      description: Return a list of all available units.
+      tags:
+      - units
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/AllUnitListResponse'
+          description: ''
+  /api/user/:
+    get:
+      operationId: user_list
+      description: |-
+        List endpoint for detail on all users.
+
+        Permissions:
+        - Staff users (who also have the 'admin' role) can perform write operations
+        - Otherwise authenticated users have read-only access
+      parameters:
+      - in: query
+        name: is_active
+        schema:
+          type: boolean
+      - in: query
+        name: is_staff
+        schema:
+          type: boolean
+      - in: query
+        name: is_superuser
+        schema:
+          type: boolean
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedUserCreateList'
+          description: ''
+    post:
+      operationId: user_create
+      description: |-
+        List endpoint for detail on all users.
+
+        Permissions:
+        - Staff users (who also have the 'admin' role) can perform write operations
+        - Otherwise authenticated users have read-only access
+      tags:
+      - user
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserCreate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserCreate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserCreate'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserCreate'
+          description: ''
+  /api/user/{id}/:
+    get:
+      operationId: user_retrieve
+      description: |-
+        Detail endpoint for a single user.
+
+        Permissions:
+        - Staff users (who also have the 'admin' role) can perform write operations
+        - Otherwise authenticated users have read-only access
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ExtendedUser'
+          description: ''
+    put:
+      operationId: user_update
+      description: |-
+        Detail endpoint for a single user.
+
+        Permissions:
+        - Staff users (who also have the 'admin' role) can perform write operations
+        - Otherwise authenticated users have read-only access
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ExtendedUser'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ExtendedUser'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ExtendedUser'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ExtendedUser'
+          description: ''
+    patch:
+      operationId: user_partial_update
+      description: |-
+        Detail endpoint for a single user.
+
+        Permissions:
+        - Staff users (who also have the 'admin' role) can perform write operations
+        - Otherwise authenticated users have read-only access
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedExtendedUser'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedExtendedUser'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedExtendedUser'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ExtendedUser'
+          description: ''
+    delete:
+      operationId: user_destroy
+      description: |-
+        Detail endpoint for a single user.
+
+        Permissions:
+        - Staff users (who also have the 'admin' role) can perform write operations
+        - Otherwise authenticated users have read-only access
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+  /api/user/group/:
+    get:
+      operationId: user_group_list
+      description: List endpoint for all auth groups.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedGroupList'
+          description: ''
+    post:
+      operationId: user_group_create
+      description: List endpoint for all auth groups.
+      tags:
+      - user
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Group'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Group'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Group'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Group'
+          description: ''
+  /api/user/group/{id}/:
+    get:
+      operationId: user_group_retrieve
+      description: Detail endpoint for a particular auth group.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Group'
+          description: ''
+    put:
+      operationId: user_group_update
+      description: Detail endpoint for a particular auth group.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Group'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Group'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Group'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Group'
+          description: ''
+    patch:
+      operationId: user_group_partial_update
+      description: Detail endpoint for a particular auth group.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedGroup'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedGroup'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedGroup'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Group'
+          description: ''
+    delete:
+      operationId: user_group_destroy
+      description: Detail endpoint for a particular auth group.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+  /api/user/me/:
+    get:
+      operationId: user_me_retrieve
+      description: |-
+        Detail endpoint for current user.
+
+        Permissions:
+        - User can edit their own details via this endpoint
+        - Only a subset of fields are available here
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/MeUser'
+          description: ''
+    put:
+      operationId: user_me_update
+      description: |-
+        Detail endpoint for current user.
+
+        Permissions:
+        - User can edit their own details via this endpoint
+        - Only a subset of fields are available here
+      tags:
+      - user
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/MeUser'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/MeUser'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/MeUser'
+        required: true
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/MeUser'
+          description: ''
+    patch:
+      operationId: user_me_partial_update
+      description: |-
+        Detail endpoint for current user.
+
+        Permissions:
+        - User can edit their own details via this endpoint
+        - Only a subset of fields are available here
+      tags:
+      - user
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedMeUser'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedMeUser'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedMeUser'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/MeUser'
+          description: ''
+    delete:
+      operationId: user_me_destroy
+      description: |-
+        Detail endpoint for current user.
+
+        Permissions:
+        - User can edit their own details via this endpoint
+        - Only a subset of fields are available here
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+  /api/user/owner/:
+    get:
+      operationId: user_owner_list
+      description: |-
+        List API endpoint for Owner model.
+
+        Cannot create a new Owner object via the API, but can view existing instances.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedOwnerList'
+          description: ''
+  /api/user/owner/{id}/:
+    get:
+      operationId: user_owner_retrieve
+      description: |-
+        Detail API endpoint for Owner model.
+
+        Cannot edit or delete
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Owner'
+          description: ''
+  /api/user/profile/:
+    get:
+      operationId: user_profile_retrieve
+      description: |-
+        Detail endpoint for the user profile.
+
+        Permissions:
+        - Any authenticated user has write access against this endpoint
+        - The endpoint always returns the profile associated with the current user
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserProfile'
+          description: ''
+    put:
+      operationId: user_profile_update
+      description: |-
+        Detail endpoint for the user profile.
+
+        Permissions:
+        - Any authenticated user has write access against this endpoint
+        - The endpoint always returns the profile associated with the current user
+      tags:
+      - user
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserProfile'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserProfile'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserProfile'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserProfile'
+          description: ''
+    patch:
+      operationId: user_profile_partial_update
+      description: |-
+        Detail endpoint for the user profile.
+
+        Permissions:
+        - Any authenticated user has write access against this endpoint
+        - The endpoint always returns the profile associated with the current user
+      tags:
+      - user
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedUserProfile'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedUserProfile'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedUserProfile'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserProfile'
+          description: ''
+  /api/user/roles/:
+    get:
+      operationId: user_roles_retrieve
+      description: API endpoint which lists the available role permissions for the
+        current user.
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Role'
+          description: ''
+  /api/user/ruleset/:
+    get:
+      operationId: user_ruleset_list
+      description: List endpoint for all RuleSet instances.
+      parameters:
+      - in: query
+        name: group
+        schema:
+          type: integer
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: name
+        schema:
+          type: string
+          enum:
+          - admin
+          - build
+          - part
+          - part_category
+          - purchase_order
+          - return_order
+          - sales_order
+          - stock
+          - stock_location
+          - stocktake
+        description: |-
+          Permission set
+
+          * `admin` - Admin
+          * `part_category` - Part Categories
+          * `part` - Parts
+          * `stocktake` - Stocktake
+          * `stock_location` - Stock Locations
+          * `stock` - Stock Items
+          * `build` - Build Orders
+          * `purchase_order` - Purchase Orders
+          * `sales_order` - Sales Orders
+          * `return_order` - Return Orders
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedRuleSetList'
+          description: ''
+  /api/user/ruleset/{id}/:
+    get:
+      operationId: user_ruleset_retrieve
+      description: Detail endpoint for a particular RuleSet instance.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/RuleSet'
+          description: ''
+    put:
+      operationId: user_ruleset_update
+      description: Detail endpoint for a particular RuleSet instance.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/RuleSet'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/RuleSet'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/RuleSet'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/RuleSet'
+          description: ''
+    patch:
+      operationId: user_ruleset_partial_update
+      description: Detail endpoint for a particular RuleSet instance.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedRuleSet'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedRuleSet'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedRuleSet'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/RuleSet'
+          description: ''
+    delete:
+      operationId: user_ruleset_destroy
+      description: Detail endpoint for a particular RuleSet instance.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '204':
+          description: No response body
+  /api/user/token/:
+    get:
+      operationId: user_token_retrieve
+      description: |-
+        Return an API token if the user is authenticated.
+
+        - If the user already has a matching token, delete it and create a new one
+        - Existing tokens are *never* exposed again via the API
+        - Once the token is provided, it can be used for auth until it expires
+      parameters:
+      - in: query
+        name: name
+        schema:
+          type: string
+        description: Name of the token
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GetAuthToken'
+          description: ''
+  /api/user/tokens/:
+    get:
+      operationId: user_tokens_list
+      description: List of user tokens for current user.
+      parameters:
+      - name: limit
+        required: true
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - name: offset
+        required: false
+        in: query
+        description: The initial index from which to return the results.
+        schema:
+          type: integer
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - in: query
+        name: revoked
+        schema:
+          type: boolean
+      - name: search
+        required: false
+        in: query
+        description: A search term.
+        schema:
+          type: string
+      - in: query
+        name: user
+        schema:
+          type: integer
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedApiTokenList'
+          description: ''
+    post:
+      operationId: user_tokens_create
+      description: List of user tokens for current user.
+      tags:
+      - user
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ApiToken'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ApiToken'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ApiToken'
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApiToken'
+          description: ''
+  /api/user/tokens/{id}/:
+    get:
+      operationId: user_tokens_retrieve
+      description: Details for a user token.
+      parameters:
+      - in: query
+        name: all_users
+        schema:
+          type: boolean
+        description: Display tokens for all users (superuser only)
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ApiToken'
+          description: ''
+    delete:
+      operationId: user_tokens_destroy
+      description: Details for a user token.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        required: true
+      tags:
+      - user
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - g:read
+      responses:
+        '204':
+          description: No response body
+  /api/version/:
+    get:
+      operationId: version_retrieve
+      description: Return information about the InvenTree server.
+      tags:
+      - version
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VersionView'
+          description: ''
+  /api/version-text:
+    get:
+      operationId: version_text_list
+      description: Simple JSON endpoint for InvenTree version text.
+      parameters:
+      - in: query
+        name: start_version
+        schema:
+          type: integer
+        description: First version to report. Defaults to return the latest {versions}
+          versions.
+      - in: query
+        name: versions
+        schema:
+          type: integer
+          default: 10
+        description: Number of versions to return.
+      tags:
+      - version-text
+      security:
+      - tokenAuth: []
+      - basicAuth: []
+      - cookieAuth: []
+      - oauth2:
+        - a:staff
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/VersionInformation'
+          description: ''
+  /api/webhook/{endpoint}/:
+    post:
+      operationId: webhook_create
+      description: Process incoming webhook.
+      parameters:
+      - in: path
+        name: endpoint
+        schema:
+          type: string
+        required: true
+      tags:
+      - webhook
+      responses:
+        '200':
+          description: Any data can be posted to the endpoint - everything will be
+            passed to the WebhookEndpoint model.
+  /api/auth/v1/config:
+    get:
+      summary: Get configuration
+      tags:
+      - Configuration
+      description: |
+        There are many configuration options that alter the functionality
+        and behavior of django-allauth, some of which can also impact the
+        frontend. Therefore, relevant configuration options are exposed via
+        this endpoint. The data returned is not user/authentication
+        dependent. Hence, it suffices to only fetch this data once at boot
+        time of your application.
+      parameters: []
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.Configuration'
+      operationId: allauth_config_get
+  /api/auth/v1/auth/login:
+    post:
+      tags:
+      - 'Authentication: Account'
+      summary: Login
+      description: |
+        Login using a username-password or email-password combination.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.Login'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.AuthenticatedByPassword'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_email:
+                  $ref: '#/components/examples/allauth.InvalidEmail'
+                password_mismatch:
+                  $ref: '#/components/examples/allauth.PasswordMismatch'
+        '401':
+          description: |
+            Not authenticated.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.AuthenticationResponse'
+              examples:
+                pending_email:
+                  $ref: '#/components/examples/allauth.UnauthenticatedPendingEmailVerification'
+                pending_2fa:
+                  $ref: '#/components/examples/allauth.UnauthenticatedPending2FA'
+        '409':
+          description: |
+            Conflict. For example, when logging in when a user is already logged in.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ConflictResponse'
+      operationId: allauth_auth_login_post
+  /api/auth/v1/auth/signup:
+    post:
+      tags:
+      - 'Authentication: Account'
+      summary: Signup
+      description: |
+        Whether or not `username`, `email`, or both are required depends on
+        the configuration of django-allauth. Additionally, if a custom signup
+        form is used there may be other custom properties required.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.Signup'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.AuthenticatedByPassword'
+        '400':
+          description: |
+            An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_email:
+                  $ref: '#/components/examples/allauth.InvalidEmail'
+        '401':
+          description: |
+            Not authenticated.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.AuthenticationResponse'
+              examples:
+                pending_email:
+                  $ref: '#/components/examples/allauth.UnauthenticatedPendingEmailVerification'
+        '403':
+          description: |
+            Forbidden. For example, when signup is closed.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ForbiddenResponse'
+        '409':
+          description: |
+            Conflict. For example, when signing up while user is logged in.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ConflictResponse'
+      operationId: allauth_auth_signup_post
+  /api/auth/v1/auth/email/verify:
+    get:
+      tags:
+      - 'Authentication: Account'
+      summary: Get email verification information
+      description: |
+        Obtain email verification information, given the token that was sent to
+        the user by email.
+      parameters:
+      - $ref: '#/components/parameters/allauth.EmailVerificationKey'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.EmailVerificationInfo'
+        '400':
+          description: |
+            An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_email:
+                  $ref: '#/components/examples/allauth.InvalidEmailVerificationKey'
+        '409':
+          description: |
+            Conflict. The email verification (by code) flow is not pending.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ConflictResponse'
+      operationId: allauth_auth_email_verify_get
+    post:
+      tags:
+      - 'Authentication: Account'
+      summary: Verify an email
+      description: |
+        Complete the email verification process. Depending on the configuration,
+        email addresses are either verified by opening a link that is sent to
+        their email address, or, by inputting a code that is sent. On the API,
+        both cases are handled identically. Meaning, the required key is either
+        the one from the link, or, the code itself.
+
+        Note that a status code of 401 does not imply failure. It indicates that
+        the email verification was successful, yet, the user is still not signed
+        in. For example, in case `ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION` is set to
+        `False`, a 401 is returned when verifying as part of login/signup.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.VerifyEmail'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.Authenticated'
+        '400':
+          description: |
+            An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_email:
+                  $ref: '#/components/examples/allauth.InvalidEmailVerificationKey'
+        '401':
+          $ref: '#/components/responses/allauth.Unauthenticated'
+        '409':
+          description: |
+            Conflict. The email verification (by code) flow is not pending.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ConflictResponse'
+      operationId: allauth_auth_email_verify_post
+  /api/auth/v1/auth/reauthenticate:
+    post:
+      tags:
+      - 'Authentication: Account'
+      summary: Reauthenticate
+      description: |
+        In order to safeguard the account, some actions require the user to be
+        recently authenticated.  If you try to perform such an action without
+        having been recently authenticated, a `401` status is returned, listing
+        flows that can be performed to reauthenticate. One such flow is the flow
+        with ID `reauthenticate`, which allows for the user to input the
+        password. This is the endpoint related towards that flow.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.Reauthenticate'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.AuthenticatedByPassword'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_email:
+                  $ref: '#/components/examples/allauth.IncorrectPassword'
+      operationId: allauth_auth_reauthenticate_post
+  /api/auth/v1/auth/password/request:
+    post:
+      summary: Request password
+      tags:
+      - 'Authentication: Password Reset'
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.RequestPassword'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.StatusOK'
+        '400':
+          description: |
+            An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_email:
+                  $ref: '#/components/examples/allauth.InvalidEmail'
+      operationId: allauth_auth_password_request_post
+  /api/auth/v1/auth/password/reset:
+    get:
+      summary: Get password reset information
+      tags:
+      - 'Authentication: Password Reset'
+      parameters:
+      - $ref: '#/components/parameters/allauth.PasswordResetKey'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.PasswordResetInfo'
+        '400':
+          description: |
+            An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                password_reset_key_invalid:
+                  $ref: '#/components/examples/allauth.InvalidPasswordResetKey'
+      operationId: allauth_auth_password_reset_get
+    post:
+      summary: Reset password
+      description: |
+        Perform the password reset, by handing over the password reset key and
+        the new password. After successfully completing the password reset, the
+        user is either logged in (in case `ACCOUNT_LOGIN_ON_PASSWORD_RESET` is
+        `True`), or, the user will need to proceed to the login page.  In case
+        of the former, a `200` status code is returned, in case of the latter a
+        401.
+      tags:
+      - 'Authentication: Password Reset'
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.ResetPassword'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.AuthenticatedByPassword'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_email:
+                  $ref: '#/components/examples/allauth.InvalidEmail'
+        '401':
+          $ref: '#/components/responses/allauth.Authentication'
+      operationId: allauth_auth_password_reset_post
+  /api/auth/v1/auth/provider/redirect:
+    post:
+      tags:
+      - 'Authentication: Providers'
+      summary: Provider redirect
+      description: |
+        Initiates the third-party provider authentication redirect flow. As calling
+        this endpoint results in a user facing redirect (302), this call is only
+        available in a browser, and must be called in a synchronous (non-XHR)
+        manner.
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.ProviderRedirect'
+      responses:
+        '302':
+          description: The provider authorization URL to which the client should be
+            redirected.
+          headers:
+            location:
+              schema:
+                type: string
+              description: The redirect URL.
+      operationId: allauth_auth_provider_redirect_post
+  /api/auth/v1/auth/provider/token:
+    post:
+      tags:
+      - 'Authentication: Providers'
+      summary: Provider token
+      description: |
+        Authenticates with a third-party provider using provider tokens received
+        by other means. For example, in case of a mobile app, the authentication
+        flow runs completely on the device itself, without any interaction with
+        the API. Then, when the (device) authentication completes and the mobile
+        app receives an access and/or ID token, it can hand over these tokens
+        via this endpoint to authenticate on the server.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.ProviderToken'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.Authenticated'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_token:
+                  $ref: '#/components/examples/allauth.InvalidProviderToken'
+        '401':
+          description: Not authenticated, more steps are required to be completed.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.AuthenticationResponse'
+              examples:
+                unauthenticated_pending_2fa:
+                  $ref: '#/components/examples/allauth.UnauthenticatedPending2FA'
+                unauthenticated_pending_email_verification:
+                  $ref: '#/components/examples/allauth.UnauthenticatedPendingEmailVerification'
+        '403':
+          description: |
+            Forbidden. For example, when signup is closed.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ForbiddenResponse'
+      operationId: allauth_auth_provider_token_post
+  /api/auth/v1/auth/provider/signup:
+    post:
+      tags:
+      - 'Authentication: Providers'
+      summary: Provider signup
+      description: |
+        If, while signing up using a third-party provider account, there is
+        insufficient information received from the provider to automatically
+        complete the signup process, an additional step is needed to complete
+        the missing data before the user is fully signed up and authenticated.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.ProviderSignup'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.Authenticated'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_email:
+                  $ref: '#/components/examples/allauth.InvalidEmail'
+        '401':
+          description: Not authenticated, more steps are required to be completed.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.AuthenticationResponse'
+              examples:
+                unauthenticated_pending_email_verification:
+                  $ref: '#/components/examples/allauth.UnauthenticatedPendingEmailVerification'
+        '403':
+          description: |
+            Forbidden. For example, when signup is closed.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ForbiddenResponse'
+        '409':
+          description: |
+            Conflict. The provider signup flow is not pending.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ConflictResponse'
+      operationId: allauth_auth_provider_signup_post
+  /api/auth/v1/auth/2fa/authenticate:
+    post:
+      tags:
+      - 'Authentication: 2FA'
+      summary: Two-factor authentication
+      description: |
+        If, during authentication,  a response with status 401 is encountered where one of the pending
+        flows has ID `mfa_authenticate`, that indicates that the Two-Factor Authentication stage needs to
+        be completed.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.MFAAuthenticate'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.AuthenticatedByPasswordAnd2FA'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_code:
+                  $ref: '#/components/examples/allauth.InvalidAuthenticatorCode'
+        '401':
+          $ref: '#/components/responses/allauth.Authentication'
+      operationId: allauth_auth_2fa_authenticate_post
+  /api/auth/v1/auth/2fa/reauthenticate:
+    post:
+      tags:
+      - 'Authentication: 2FA'
+      summary: Reauthenticate using 2FA
+      description: |
+        In order to safeguard the account, some actions require the user to be
+        recently authenticated.  If you try to perform such an action without
+        having been recently authenticated, a `401` status is returned, listing
+        flows that can be performed to reauthenticate. One such flow is the flow
+        with ID `mfa_reauthenticate`, which allows for the user to input an
+        authenticator code (e.g. TOTP or recovery code). This is the endpoint
+        related towards that flow.
+      parameters: []
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.AuthenticatedByPasswordAnd2FA'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_code:
+                  $ref: '#/components/examples/allauth.InvalidAuthenticatorCode'
+      operationId: allauth_auth_2fa_reauthenticate_post
+  /api/auth/v1/auth/webauthn/authenticate:
+    get:
+      tags:
+      - 'Authentication: WebAuthn: Login'
+      summary: Get WebAuthn credential request options for 2FA
+      parameters: []
+      description: |
+        Returns the WebAuthn credential request options, that can be
+        processed using `parseRequestOptionsFromJSON()` on the frontend.
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.WebAuthnRequestOptionsResponse'
+      operationId: allauth_auth_webauthn_authenticate_get
+    post:
+      tags:
+      - 'Authentication: WebAuthn: Login'
+      summary: Perform 2FA using WebAuthn
+      parameters: []
+      description: |
+        Perform Two-Factor Authentication using a WebAuthn credential.
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.AuthenticateWebAuthn'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.Authenticated'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+      operationId: allauth_auth_webauthn_authenticate_post
+  /api/auth/v1/auth/webauthn/reauthenticate:
+    get:
+      tags:
+      - 'Authentication: WebAuthn: Login'
+      summary: Get WebAuthn credential request options for reauthentication
+      parameters: []
+      description: |
+        Returns the WebAuthn credential request options, that can be
+        processed using `parseRequestOptionsFromJSON()` on the frontend.
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.WebAuthnRequestOptionsResponse'
+      operationId: allauth_auth_webauthn_reauthenticate_get
+    post:
+      tags:
+      - 'Authentication: WebAuthn: Login'
+      summary: Reauthenticate using WebAuthn
+      parameters: []
+      description: |
+        Reauthenticate the user using a WebAuthn credential.
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.ReauthenticateWebAuthn'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.Authenticated'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+      operationId: allauth_auth_webauthn_reauthenticate_post
+  /api/auth/v1/auth/webauthn/login:
+    get:
+      tags:
+      - 'Authentication: WebAuthn: Login'
+      summary: Get WebAuthn credential request options for login
+      parameters: []
+      description: |
+        Returns the WebAuthn credential request options, that can be
+        processed using `parseRequestOptionsFromJSON()` on the frontend.
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.WebAuthnRequestOptionsResponse'
+      operationId: allauth_auth_webauthn_login_get
+    post:
+      tags:
+      - 'Authentication: WebAuthn: Login'
+      summary: Login using WebAuthn
+      parameters: []
+      description: |
+        Login using a WebAuthn credential (Passkey). Both 200 and 401 can be
+        expected after a successful request.  The 401 can, for example, occur
+        when the credential passed was valid, but the email attached to the
+        account still requires verification.
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.LoginWebAuthn'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.Authenticated'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+        '401':
+          description: |
+            Not authenticated.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.AuthenticationResponse'
+              examples:
+                pending_email:
+                  $ref: '#/components/examples/allauth.UnauthenticatedPendingEmailVerification'
+      operationId: allauth_auth_webauthn_login_post
+  /api/auth/v1/auth/webauthn/signup:
+    post:
+      tags:
+      - 'Authentication: WebAuthn: Signup'
+      summary: Initiate the passkey signup flow
+      parameters: []
+      description: |
+        You initiate the passkey signup flow by inputting (`POST`) the required properties (e.g. email)
+        similar to the regular account signup, except that the `password` is to be left out.
+        The user will then be required to verify the email address, after which WebAuthn credential
+        creation options can be retrieved (`GET`) and used to actualy complete (`PUT`) the flow.
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.PasskeySignup'
+      responses:
+        '400':
+          description: |
+            An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_email:
+                  $ref: '#/components/examples/allauth.InvalidEmail'
+        '401':
+          description: |
+            Not authenticated, email verification pending.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.AuthenticationResponse'
+              examples:
+                pending_email:
+                  $ref: '#/components/examples/allauth.UnauthenticatedPendingEmailVerification'
+        '403':
+          description: |
+            Forbidden. For example, when signup is closed.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ForbiddenResponse'
+        '409':
+          description: |
+            Conflict. For example, when signing up while user is logged in.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ConflictResponse'
+      operationId: allauth_auth_webauthn_signup_post
+    get:
+      tags:
+      - 'Authentication: WebAuthn: Signup'
+      summary: Get passkey credential request options
+      parameters: []
+      description: |
+        Returns the WebAuthn credential request options, that can be
+        processed using `parseRequestOptionsFromJSON()` on the frontend.
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.WebAuthnRequestOptionsResponse'
+        '409':
+          description: |
+            Conflict. For example, when the passkey signup flow is not pending.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ConflictResponse'
+      operationId: allauth_auth_webauthn_signup_get
+    put:
+      tags:
+      - 'Authentication: WebAuthn: Signup'
+      summary: Complete the passkey signup flow
+      parameters: []
+      description: |
+        Complete the passkey signup flow by handing over the WebAuthn credential.
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.AddWebAuthnAuthenticator'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.Authenticated'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+        '401':
+          description: |
+            Not authenticated.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.AuthenticationResponse'
+              examples:
+                pending_email:
+                  $ref: '#/components/examples/allauth.UnauthenticatedPendingEmailVerification'
+        '409':
+          description: |
+            Conflict. For example, when the passkey signup flow is not pending.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ConflictResponse'
+      operationId: allauth_auth_webauthn_signup_put
+  /api/auth/v1/auth/code/request:
+    post:
+      tags:
+      - 'Authentication: Login By Code'
+      summary: Request login code
+      description: |
+        Request a "special" login code that is sent to the user by email.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.RequestLoginCode'
+      responses:
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_email:
+                  $ref: '#/components/examples/allauth.InvalidEmail'
+        '401':
+          description: |
+            Not authenticated.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.AuthenticationResponse'
+              examples:
+                pending_login_by_code:
+                  $ref: '#/components/examples/allauth.UnauthenticatedPendingLoginByCode'
+      operationId: allauth_auth_code_request_post
+  /api/auth/v1/auth/code/confirm:
+    post:
+      tags:
+      - 'Authentication: Login By Code'
+      summary: Confirm login code
+      description: |
+        Use this endpoint to pass along the received "special" login code.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.ConfirmLoginCode'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.AuthenticatedByCode'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_code:
+                  $ref: '#/components/examples/allauth.InvalidAuthenticatorCode'
+        '401':
+          description: |
+            Not authenticated.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.AuthenticationResponse'
+              examples:
+                unauthenticated_pending_2fa:
+                  $ref: '#/components/examples/allauth.UnauthenticatedPending2FA'
+        '409':
+          description: |
+            Conflict. The "login by code" flow is not pending.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ConflictResponse'
+      operationId: allauth_auth_code_confirm_post
+  /api/auth/v1/account/providers:
+    get:
+      tags:
+      - 'Account: Providers'
+      summary: List the connected third-party provider accounts
+      parameters: []
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.ProviderAccounts'
+      operationId: allauth_account_providers_get
+    delete:
+      tags:
+      - 'Account: Providers'
+      summary: |
+        Disconnect a third-party provider account
+      description: |
+        Disconnect a third-party provider account, returning the remaining
+        accounts that are still connected. The disconnect is not allowed if it
+        would leave the account unusable. For example, if no password was
+        set up yet.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.ProviderAccount'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.ProviderAccounts'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                no_password:
+                  $ref: '#/components/examples/allauth.DisconnectNotAllowedNoPassword'
+                no_email:
+                  $ref: '#/components/examples/allauth.DisconnectNotAllowedNoVerifiedEmail'
+      operationId: allauth_account_providers_delete
+  /api/auth/v1/account/email:
+    get:
+      tags:
+      - 'Account: Email'
+      summary: List email addresses
+      description: |
+        Retrieves the list of email addreses of the account.
+      parameters: []
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.EmailAddresses'
+        '401':
+          $ref: '#/components/responses/allauth.Authentication'
+      operationId: allauth_account_email_get
+    post:
+      tags:
+      - 'Account: Email'
+      summary: |
+        Add an email addresses
+      description: |
+        Add a new email address to the account. The email address will be marked as unverified, and
+        an email verification mail will be sent.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.Email'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.EmailAddresses'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_code:
+                  $ref: '#/components/examples/allauth.InvalidEmail'
+        '401':
+          $ref: '#/components/responses/allauth.AuthenticationOrReauthentication'
+      operationId: allauth_account_email_post
+    put:
+      tags:
+      - 'Account: Email'
+      summary: Request email verification
+      description: |
+        Requests for (another) email verification email to be sent. Note that
+        sending emails is rate limited, so when you send too many requests the
+        email will not be sent.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.Email'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.StatusOK'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_code:
+                  $ref: '#/components/examples/allauth.InvalidEmail'
+        '403':
+          description: |
+            Too many email verification mails were already sent.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ForbiddenResponse'
+      operationId: allauth_account_email_put
+    patch:
+      tags:
+      - 'Account: Email'
+      summary: Change primary email address
+      description: |
+        Used to change primary email address to a different one. Note that only verified email addresses
+        can be marked as primary.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.MarkPrimaryEmail'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.EmailAddresses'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_code:
+                  $ref: '#/components/examples/allauth.InvalidEmail'
+      operationId: allauth_account_email_patch
+    delete:
+      tags:
+      - 'Account: Email'
+      summary: Remove an email address
+      description: |
+        Used to remove an email address.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.Email'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.EmailAddresses'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_code:
+                  $ref: '#/components/examples/allauth.InvalidEmail'
+      operationId: allauth_account_email_delete
+  /api/auth/v1/account/authenticators:
+    get:
+      tags:
+      - 'Account: 2FA'
+      summary: List authenticators
+      parameters: []
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.Authenticators'
+        '401':
+          $ref: '#/components/responses/allauth.Authentication'
+        '410':
+          $ref: '#/components/responses/allauth.SessionGone'
+      operationId: allauth_account_authenticators_get
+  /api/auth/v1/account/authenticators/totp:
+    get:
+      tags:
+      - 'Account: 2FA'
+      summary: TOTP authenticator status
+      description: |
+        Retrieve the information about the current TOTP authenticator, if any.
+      parameters: []
+      responses:
+        '404':
+          $ref: '#/components/responses/allauth.TOTPAuthenticatorNotFound'
+        '200':
+          $ref: '#/components/responses/allauth.TOTPAuthenticator'
+        '409':
+          $ref: '#/components/responses/allauth.AddAuthenticatorConflict'
+      operationId: allauth_account_authenticators_totp_get
+    post:
+      tags:
+      - 'Account: 2FA'
+      summary: Activate TOTP
+      description: |
+        The code should be provided from the consuming TOTP authenticator
+        application which was generated using the TOTP authenticator secret
+        retrieved from the TOTP authenticator status endpoint.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.SetupTOTP'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.TOTPAuthenticator'
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_code:
+                  $ref: '#/components/examples/allauth.InvalidAuthenticatorCode'
+        '409':
+          $ref: '#/components/responses/allauth.AddAuthenticatorConflict'
+      operationId: allauth_account_authenticators_totp_post
+    delete:
+      tags:
+      - 'Account: 2FA'
+      summary: Deactivate TOTP
+      description: |
+        Deactivates TOTP authentication. If the user authentication is not
+        sufficiently recent, a reauthentication flow (`401`) will is presented.
+      parameters: []
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.StatusOK'
+        '401':
+          $ref: '#/components/responses/allauth.ReauthenticationRequired'
+      operationId: allauth_account_authenticators_totp_delete
+  /api/auth/v1/account/authenticators/recovery_codes:
+    get:
+      tags:
+      - 'Account: 2FA'
+      summary: List recovery codes
+      description: |
+        List recovery codes.
+      parameters: []
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.RecoveryCodes'
+        '401':
+          $ref: '#/components/responses/allauth.ReauthenticationRequired'
+        '404':
+          $ref: '#/components/responses/allauth.NotFound'
+      operationId: allauth_account_authenticators_recovery_codes_get
+    post:
+      tags:
+      - 'Account: 2FA'
+      summary: Regenerate recovery codes
+      parameters: []
+      responses:
+        '400':
+          description: An input error occurred.
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/allauth.ErrorResponse'
+              examples:
+                invalid_code:
+                  $ref: '#/components/examples/allauth.CannotGenerateRecoveryCodes'
+        '401':
+          $ref: '#/components/responses/allauth.ReauthenticationRequired'
+      operationId: allauth_account_authenticators_recovery_codes_post
+  /api/auth/v1/account/authenticators/webauthn:
+    get:
+      tags:
+      - 'Account: WebAuthn'
+      summary: |
+        Get WebAuthn credential creation options
+      parameters: []
+      description: |
+        Returns the WebAuthn credential creation options, that can be
+        processed using `parseCreationOptionsFromJSON()` on the frontend.
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.WebAuthnCreationOptionsResponse'
+        '401':
+          $ref: '#/components/responses/allauth.ReauthenticationRequired'
+        '409':
+          $ref: '#/components/responses/allauth.AddAuthenticatorConflict'
+      operationId: allauth_account_authenticators_webauthn_get
+    put:
+      tags:
+      - 'Account: WebAuthn'
+      summary: |
+        Rename a WebAuthn credential
+      description: |
+        You can alter the name of a WebAuthn credential by PUT'ting the ID and
+        name of the authenticator representing that credential. You can obtain
+        the credentials via the "List authenticators" endpoint.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.UpdateWebAuthn'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.WebAuthnAuthenticator'
+        '401':
+          $ref: '#/components/responses/allauth.ReauthenticationRequired'
+      operationId: allauth_account_authenticators_webauthn_put
+    delete:
+      tags:
+      - 'Account: WebAuthn'
+      summary: |
+        Delete a WebAuthn credential
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.DeleteWebAuthn'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.StatusOK'
+        '401':
+          $ref: '#/components/responses/allauth.ReauthenticationRequired'
+      operationId: allauth_account_authenticators_webauthn_delete
+    post:
+      tags:
+      - 'Account: WebAuthn'
+      summary: |
+        Add a WebAuthn credential
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.AddWebAuthnAuthenticator'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.AddWebAuthnAuthenticator'
+        '401':
+          $ref: '#/components/responses/allauth.ReauthenticationRequired'
+        '409':
+          $ref: '#/components/responses/allauth.AddAuthenticatorConflict'
+      operationId: allauth_account_authenticators_webauthn_post
+  /api/auth/v1/auth/session:
+    get:
+      tags:
+      - 'Authentication: Current Session'
+      summary: |
+        Get authentication status
+      description: |
+        Retrieve information about the authentication status for the current
+        session.
+      parameters: []
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.Authenticated'
+        '401':
+          $ref: '#/components/responses/allauth.Authentication'
+        '410':
+          $ref: '#/components/responses/allauth.SessionGone'
+      operationId: allauth_auth_session_get
+    delete:
+      tags:
+      - 'Authentication: Current Session'
+      summary: Logout
+      description: |
+        Logs out the user from the current session.
+      parameters: []
+      responses:
+        '401':
+          $ref: '#/components/responses/allauth.Unauthenticated'
+      operationId: allauth_auth_session_delete
+  /api/auth/v1/account/password/change:
+    post:
+      tags:
+      - 'Account: Password'
+      summary: Change password
+      description: |
+        In order to change the password of an account, the current and new
+        password must be provider.  However, accounts that were created by
+        signing up using a third-party provider do not have a password set. In
+        that case, the current password is not required.
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.ChangePassword'
+      responses:
+        '400':
+          $ref: '#/components/responses/allauth.Error'
+        '401':
+          $ref: '#/components/responses/allauth.Authentication'
+      operationId: allauth_account_password_change_post
+  /api/auth/v1/auth/sessions:
+    get:
+      tags:
+      - Sessions
+      summary: List sessions
+      parameters: []
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.Sessions'
+      operationId: allauth_auth_sessions_get
+    delete:
+      tags:
+      - Sessions
+      summary: End one or more sessions
+      parameters: []
+      requestBody:
+        $ref: '#/components/requestBodies/allauth.EndSessions'
+      responses:
+        '200':
+          $ref: '#/components/responses/allauth.Sessions'
+        '401':
+          $ref: '#/components/responses/allauth.Authentication'
+      operationId: allauth_auth_sessions_delete
+components:
+  examples:
+    allauth.AuthenticatedByCode:
+      summary: |
+        Authenticated by code.
+      value:
+        status: 200
+        data:
+          user:
+            id: 123
+            display: wizard
+            has_usable_password: true
+            email: email@domain.org
+            username: wizard
+          methods:
+          - method: code
+            at: 1711555057.065702
+            email: email@domain.org
+        meta:
+          is_authenticated: true
+          session_token: ufwcig0zen9skyd545jc0fkq813ghar2
+          access_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdW
+    allauth.AuthenticatedByPassword:
+      summary: |
+        Authenticated by password.
+      value:
+        status: 200
+        data:
+          user:
+            id: 123
+            display: wizard
+            has_usable_password: true
+            email: email@domain.org
+            username: wizard
+          methods:
+          - method: password
+            at: 1711555057.065702
+            email: email@domain.org
+        meta:
+          is_authenticated: true
+          session_token: ufwcig0zen9skyd545jc0fkq813ghar2
+          access_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdW
+    allauth.AuthenticatedByPasswordAnd2FA:
+      summary: |
+        Fully authenticated using by password and 2FA.
+      value:
+        status: 200
+        data:
+          user:
+            id: 123
+            display: Magic Wizard
+            has_usable_password: true
+            email: email@domain.org
+            username: wizard
+          methods:
+          - method: password
+            at: 1711555057.065702
+            email: email@domain.org
+          - method: mfa
+            at: 1711555060.9375854
+            id: 66
+            type: totp
+        meta:
+          is_authenticated: true
+          session_token: ufwcig0zen9skyd545jc0fkq813ghar2
+          access_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdW
+    allauth.CannotGenerateRecoveryCodes:
+      summary: |
+        Unable to generate recovery codes.
+      value:
+        status: 400
+        errors:
+        - message: |
+            You cannot deactivate two-factor authentication.
+            code: cannot_generate_recovery_codes
+    allauth.DisconnectNotAllowedNoPassword:
+      summary: Account without a password.
+      value:
+        status: 400
+        errors:
+        - message: Your account has no password set up.
+          code: no_password
+          param: account
+    allauth.DisconnectNotAllowedNoVerifiedEmail:
+      summary: Account without a verified email.
+      value:
+        status: 400
+        errors:
+        - message: Your account has no verified email address.
+          code: no_verified_email
+          param: account
+    allauth.IncorrectPassword:
+      value:
+        status: 400
+        errors:
+        - message: Incorrect password.
+          param: password
+          code: incorrect_password
+    allauth.InvalidAuthenticatorCode:
+      summary: |
+        An error response indicating that the provided code is incorrect.
+      value:
+        status: 400
+        errors:
+        - message: Incorrect code.
+          code: incorrect_code
+          param: code
+    allauth.InvalidEmail:
+      value:
+        status: 400
+        errors:
+        - message: Enter a valid email address.
+          code: invalid
+          param: email
+    allauth.InvalidEmailVerificationKey:
+      summary: |
+        Email verification key invalid.
+      value:
+        status: 400
+        errors:
+        - message: Invalid or expired key.
+          code: invalid
+          param: key
+    allauth.InvalidPasswordResetKey:
+      summary: |
+        Password reset key invalid.
+      value:
+        status: 400
+        errors:
+        - message: The password reset token was invalid.
+          code: token_invalid
+          param: key
+    allauth.InvalidProviderToken:
+      summary: |
+        Provider token invalid.
+      value:
+        status: 400
+        errors:
+        - message: The token was invalid.
+          code: invalid
+          param: token
+    allauth.PasswordMismatch:
+      value:
+        status: 400
+        errors:
+        - message: The email address and/or password you specified are not correct.
+          code: email_password_mismatch
+          param: password
+    allauth.ReauthenticationRequired:
+      summary: |
+        Reauthentication required
+      value:
+        status: 401
+        data:
+          user:
+            id: 123
+            display: wizard
+            has_usable_password: true
+            email: email@domain.org
+            username: wizard
+          methods:
+          - method: password
+            at: 1711555057.065702
+            email: email@domain.org
+          - method: mfa
+            at: 1711555060.9375854
+            id: 66
+            type: totp
+          flows:
+          - id: reauthenticate
+          - id: mfa_reauthenticate
+        meta:
+          is_authenticated: true
+    allauth.UnauthenticatedInitial:
+      summary: |
+        Unauthenticated: Initial
+      value:
+        status: 401
+        data:
+          flows:
+          - id: login
+          - id: signup
+          - id: provider_redirect
+            providers:
+            - facebook
+            - google
+            - telegram
+          - id: provider_token
+            providers:
+            - google
+        meta:
+          is_authenticated: false
+    allauth.UnauthenticatedPending2FA:
+      summary: |
+        Unauthenticated: pending 2FA
+      value:
+        status: 401
+        data:
+          flows:
+          - id: login
+          - id: signup
+          - id: provider_redirect
+            providers:
+            - facebook
+            - google
+            - telegram
+          - id: provider_token
+            providers:
+            - google
+          - id: mfa_authenticate
+            is_pending: true
+        meta:
+          is_authenticated: false
+    allauth.UnauthenticatedPendingEmailVerification:
+      summary: |
+        Unauthenticated: pending email verification
+      value:
+        status: 401
+        data:
+          flows:
+          - id: login
+          - id: signup
+          - id: provider_redirect
+            providers:
+            - facebook
+            - google
+            - telegram
+          - id: provider_token
+            providers:
+            - google
+          - id: verify_email
+            is_pending: true
+        meta:
+          is_authenticated: false
+    allauth.UnauthenticatedPendingLoginByCode:
+      summary: |
+        Unauthenticated: pending login by code
+      value:
+        status: 401
+        data:
+          flows:
+          - id: login
+          - id: signup
+          - id: provider_redirect
+            providers:
+            - facebook
+            - google
+            - telegram
+          - id: provider_token
+            providers:
+            - google
+          - id: mfa_authenticate
+          - id: login_by_code
+            is_pending: true
+        meta:
+          is_authenticated: false
+    allauth.UnauthenticatedPendingProviderSignup:
+      summary: |
+        Unauthenticated: pending provider signup
+      value:
+        status: 401
+        data:
+          flows:
+          - id: login
+          - id: signup
+          - id: provider_redirect
+            providers:
+            - facebook
+            - google
+            - telegram
+          - id: provider_token
+            providers:
+            - google
+          - id: provider_signup
+            provider:
+              id: google
+              name: Google
+              client_id: 123.apps.googleusercontent.com
+              flows:
+              - provider_redirect
+              - provider_token
+            is_pending: true
+        meta:
+          is_authenticated: false
+  parameters:
+    allauth.EmailVerificationKey:
+      in: header
+      name: X-Email-Verification-Key
+      schema:
+        type: string
+      required: true
+      description: The email verification key
+    allauth.PasswordResetKey:
+      in: header
+      name: X-Password-Reset-Key
+      schema:
+        type: string
+      required: true
+      description: The password reset key
+  requestBodies:
+    allauth.AddWebAuthnAuthenticator:
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              name:
+                type: string
+                example: Master key
+              credential:
+                $ref: '#/components/schemas/allauth.WebAuthnCredential'
+            required:
+            - credential
+    allauth.AuthenticateWebAuthn:
+      description: Authenticate using WebAuthn.
+      required: true
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              credential:
+                $ref: '#/components/schemas/allauth.WebAuthnCredential'
+            required:
+            - credential
+    allauth.ChangePassword:
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              current_password:
+                $ref: '#/components/schemas/allauth.Password'
+              new_password:
+                type: string
+                description: |
+                  The current password.
+                example: Aberto!
+            required:
+            - new_password
+    allauth.ConfirmLoginCode:
+      required: true
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.ConfirmLoginCode'
+    allauth.DeleteWebAuthn:
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              authenticators:
+                description: |
+                  The IDs of the authenticator that are to be deleted.
+                type: array
+                items:
+                  $ref: '#/components/schemas/allauth.AuthenticatorID'
+            required:
+            - authenticators
+    allauth.Email:
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              email:
+                type: string
+                description: |
+                  An email address.
+                example: email@domain.org
+            required:
+            - email
+    allauth.EndSessions:
+      required: true
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.EndSessions'
+    allauth.Login:
+      description: Login.
+      required: true
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.Login'
+    allauth.LoginWebAuthn:
+      description: Login using WebAuthn.
+      required: true
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              credential:
+                $ref: '#/components/schemas/allauth.WebAuthnCredential'
+            required:
+            - credential
+    allauth.MFAAuthenticate:
+      required: true
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.MFAAuthenticate'
+    allauth.MarkPrimaryEmail:
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              email:
+                type: string
+                description: |
+                  An email address.
+                example: email@domain.org
+              primary:
+                type: boolean
+                enum:
+                - true
+                description: |
+                  Primary flag.
+            required:
+            - email
+            - primary
+    allauth.PasskeySignup:
+      description: Signup using a passkey
+      required: true
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.PasskeySignup'
+    allauth.ProviderAccount:
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              provider:
+                $ref: '#/components/schemas/allauth.ProviderID'
+              account:
+                $ref: '#/components/schemas/allauth.ProviderAccountID'
+            required:
+            - account
+            - provider
+    allauth.ProviderRedirect:
+      required: true
+      description: |
+        Initiate the provider redirect flow.
+      content:
+        application/x-www-form-urlencoded:
+          schema:
+            $ref: '#/components/schemas/allauth.ProviderRedirect'
+    allauth.ProviderSignup:
+      description: Provider signup.
+      required: true
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.ProviderSignup'
+    allauth.ProviderToken:
+      required: true
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.ProviderToken'
+    allauth.Reauthenticate:
+      description: Reauthenticate.
+      required: true
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.Reauthenticate'
+    allauth.ReauthenticateWebAuthn:
+      description: Reauthenticate using WebAuthn.
+      required: true
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              credential:
+                $ref: '#/components/schemas/allauth.WebAuthnCredential'
+            required:
+            - credential
+    allauth.RequestLoginCode:
+      description: Request a login code.
+      required: true
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.RequestLoginCode'
+    allauth.RequestPassword:
+      description: Request password.
+      required: true
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.RequestPassword'
+    allauth.ResetPassword:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.ResetPassword'
+    allauth.SetupTOTP:
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              code:
+                $ref: '#/components/schemas/allauth.AuthenticatorCode'
+            required:
+            - code
+    allauth.Signup:
+      description: Signup
+      required: true
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.Signup'
+    allauth.UpdateWebAuthn:
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              id:
+                $ref: '#/components/schemas/allauth.AuthenticatorID'
+              name:
+                type: string
+                example: Master key
+    allauth.VerifyEmail:
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.VerifyEmail'
+  responses:
+    allauth.AddAuthenticatorConflict:
+      description: |
+        The account prohibits adding an authenticator, e.g. because of an unverified email address.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.ConflictResponse'
+    allauth.AddWebAuthnAuthenticator:
+      description: A WebAuthn authenticator.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                $ref: '#/components/schemas/allauth.StatusOK'
+              data:
+                $ref: '#/components/schemas/allauth.WebAuthnAuthenticator'
+              meta:
+                type: object
+                properties:
+                  recovery_codes_generated:
+                    type: boolean
+                    description: |
+                      Whether or not recovery codes where generated automatically.
+            required:
+            - status
+            - data
+            - meta
+    allauth.Authenticated:
+      description: The user is authenticated.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.AuthenticatedResponse'
+    allauth.AuthenticatedByCode:
+      description: |
+        Authenticated by code.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.AuthenticatedResponse'
+          examples:
+            authenticated:
+              $ref: '#/components/examples/allauth.AuthenticatedByCode'
+    allauth.AuthenticatedByPassword:
+      description: |
+        Authenticated by password.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.AuthenticatedResponse'
+          examples:
+            authenticated:
+              $ref: '#/components/examples/allauth.AuthenticatedByPassword'
+    allauth.AuthenticatedByPasswordAnd2FA:
+      description: |
+        Authenticated by password and 2FA.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.AuthenticatedResponse'
+          examples:
+            authenticated:
+              $ref: '#/components/examples/allauth.AuthenticatedByPasswordAnd2FA'
+    allauth.Authentication:
+      description: Not authenticated.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.AuthenticationResponse'
+          examples:
+            unauthenticated_initial:
+              $ref: '#/components/examples/allauth.UnauthenticatedInitial'
+            unauthenticated_pending_2fa:
+              $ref: '#/components/examples/allauth.UnauthenticatedPending2FA'
+            unauthenticated_pending_provider_signup:
+              $ref: '#/components/examples/allauth.UnauthenticatedPendingProviderSignup'
+            unauthenticated_pending_email_verification:
+              $ref: '#/components/examples/allauth.UnauthenticatedPendingEmailVerification'
+            reauthentication_required:
+              $ref: '#/components/examples/allauth.ReauthenticationRequired'
+    allauth.AuthenticationOrReauthentication:
+      description: |
+        The response indicates authentication or re-authentication is required.
+      content:
+        application/json:
+          schema:
+            oneOf:
+            - $ref: '#/components/schemas/allauth.AuthenticationResponse'
+            - $ref: '#/components/schemas/allauth.ReauthenticationResponse'
+    allauth.Authenticators:
+      description: |
+        List of authenticators.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                $ref: '#/components/schemas/allauth.StatusOK'
+              data:
+                $ref: '#/components/schemas/allauth.AuthenticatorList'
+            required:
+            - status
+            - data
+    allauth.Configuration:
+      description: |
+        The django-allauth configuration.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.ConfigurationResponse'
+    allauth.EmailAddresses:
+      description: |
+        List of email addresses.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                $ref: '#/components/schemas/allauth.StatusOK'
+              data:
+                type: array
+                items:
+                  $ref: '#/components/schemas/allauth.EmailAddress'
+            required:
+            - status
+            - data
+    allauth.EmailVerificationInfo:
+      description: Email verification information.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.EmailVerificationInfo'
+    allauth.Error:
+      description: An input error occurred.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.ErrorResponse'
+    allauth.Forbidden:
+      description: |
+        A forbidden response.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.ForbiddenResponse'
+    allauth.NotFound:
+      description: |
+        Not found.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                type: integer
+                enum:
+                - 404
+            required:
+            - status
+    allauth.PasswordResetInfo:
+      description: Information about the password reset key.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                $ref: '#/components/schemas/allauth.StatusOK'
+              data:
+                type: object
+                properties:
+                  user:
+                    $ref: '#/components/schemas/allauth.User'
+            required:
+            - status
+            - data
+    allauth.ProviderAccounts:
+      description: |
+        List of third-party provider accounts.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                $ref: '#/components/schemas/allauth.StatusOK'
+              data:
+                type: array
+                items:
+                  $ref: '#/components/schemas/allauth.ProviderAccount'
+            required:
+            - status
+            - data
+    allauth.ReauthenticationRequired:
+      description: |
+        The response indicates reauthentication is required.
+      content:
+        application/json:
+          examples:
+            reauthentication_required:
+              summary: |
+                Reauthentication required
+              value:
+                status: 401
+                data:
+                  user:
+                    id: 123
+                    display: wizard
+                    has_usable_password: true
+                    email: email@domain.org
+                    username: wizard
+                  methods:
+                  - method: password
+                    at: 1711555057.065702
+                    email: email@domain.org
+                  - method: mfa
+                    at: 1711555060.9375854
+                    id: 66
+                    type: totp
+                  flows:
+                  - id: reauthenticate
+                  - id: mfa_reauthenticate
+                meta:
+                  is_authenticated: true
+    allauth.RecoveryCodes:
+      description: |
+        Information on the recovery codes.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                $ref: '#/components/schemas/allauth.StatusOK'
+              data:
+                $ref: '#/components/schemas/allauth.SensitiveRecoveryCodesAuthenticator'
+            required:
+            - status
+            - data
+    allauth.SessionGone:
+      description: |
+        The response indicates session is invalid or no longer exists.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.SessionGoneResponse'
+          examples:
+            unauth:
+              $ref: '#/components/examples/allauth.UnauthenticatedInitial'
+    allauth.Sessions:
+      description: |
+        List of sessions.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                $ref: '#/components/schemas/allauth.StatusOK'
+              data:
+                type: array
+                items:
+                  $ref: '#/components/schemas/allauth.Session'
+            required:
+            - status
+            - data
+    allauth.StatusOK:
+      description: |
+        A success response.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                $ref: '#/components/schemas/allauth.StatusOK'
+            required:
+            - status
+    allauth.TOTPAuthenticator:
+      description: |
+        Information on the TOTP authenticator.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                $ref: '#/components/schemas/allauth.StatusOK'
+              data:
+                $ref: '#/components/schemas/allauth.TOTPAuthenticator'
+            required:
+            - status
+            - data
+    allauth.TOTPAuthenticatorNotFound:
+      description: |
+        No TOTP authenticator has been set up.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                type: integer
+                enum:
+                - 404
+              meta:
+                type: object
+                properties:
+                  secret:
+                    type: string
+                    description: |
+                      A TOTP secret that can be used to setup a new authenticator.
+                    example: J4ZKKXTK7NOVU7EPUVY23LCDV4T2QZYM
+                  totp_url:
+                    type: string
+                    description: |
+                      otpauth URI from which a QR code can be generated and scanned by OTP clients.
+                    example: otpauth://totp/Example:alice@fsf.org?secret=JBSWY3DPEHPK3PXP&issuer=Example
+                required:
+                - secret
+                - totp_url
+            required:
+            - status
+            - meta
+    allauth.Unauthenticated:
+      description: |
+        There is no authenticated session.
+      content:
+        application/json:
+          schema:
+            $ref: '#/components/schemas/allauth.AuthenticationResponse'
+          examples:
+            unauth:
+              $ref: '#/components/examples/allauth.UnauthenticatedInitial'
+    allauth.WebAuthnAuthenticator:
+      description: A WebAuthn authenticator.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                $ref: '#/components/schemas/allauth.StatusOK'
+              data:
+                $ref: '#/components/schemas/allauth.WebAuthnAuthenticator'
+            required:
+            - status
+            - data
+    allauth.WebAuthnCreationOptionsResponse:
+      description: WebAuthn credential creation options.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                $ref: '#/components/schemas/allauth.StatusOK'
+              data:
+                $ref: '#/components/schemas/allauth.WebAuthnCredentialCreationOptions'
+            required:
+            - status
+            - data
+    allauth.WebAuthnRequestOptionsResponse:
+      description: WebAuthn credential request options.
+      content:
+        application/json:
+          schema:
+            type: object
+            properties:
+              status:
+                $ref: '#/components/schemas/allauth.StatusOK'
+              data:
+                $ref: '#/components/schemas/allauth.WebAuthnCredentialRequestOptions'
+            required:
+            - status
+            - data
+  schemas:
+    APISearchView:
+      type: object
+      description: Serializer for the APISearchView.
+      properties:
+        search:
+          type: string
+        search_regex:
+          type: boolean
+          default: false
+        search_whole:
+          type: boolean
+          default: false
+        search_notes:
+          type: boolean
+          default: false
+        limit:
+          type: integer
+          default: 1
+        offset:
+          type: integer
+          default: 0
+      required:
+      - search
+    AcceptOverallocatedEnum:
+      enum:
+      - reject
+      - accept
+      - trim
+      type: string
+      description: |-
+        * `reject` - Not permitted
+        * `accept` - Accept as consumed by this build order
+        * `trim` - Deallocate before completing this build order
+    ActionPlugin:
+      type: object
+      description: Serializer for the ActionPluginView responses.
+      properties:
+        action:
+          type: string
+        data:
+          type: object
+          additionalProperties: {}
+      required:
+      - action
+      - data
+    Address:
+      type: object
+      description: Serializer for the Address Model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        company:
+          type: integer
+          description: Select company
+        title:
+          type: string
+          title: Address title
+          description: Title describing the address entry
+          maxLength: 100
+        primary:
+          type: boolean
+          title: Primary address
+          description: Set as primary address
+        line1:
+          type: string
+          title: Line 1
+          description: Address line 1
+          maxLength: 50
+        line2:
+          type: string
+          title: Line 2
+          description: Address line 2
+          maxLength: 50
+        postal_code:
+          type: string
+          description: Postal code
+          maxLength: 10
+        postal_city:
+          type: string
+          title: City/Region
+          description: Postal code city/region
+          maxLength: 50
+        province:
+          type: string
+          title: State/Province
+          description: State or province
+          maxLength: 50
+        country:
+          type: string
+          description: Address country
+          maxLength: 50
+        shipping_notes:
+          type: string
+          title: Courier shipping notes
+          description: Notes for shipping courier
+          maxLength: 100
+        internal_shipping_notes:
+          type: string
+          description: Shipping notes for internal use
+          maxLength: 100
+        link:
+          type: string
+          format: uri
+          description: Link to address information (external)
+          maxLength: 2000
+      required:
+      - company
+      - pk
+      - title
+    AddressBrief:
+      type: object
+      description: Serializer for Address Model (limited).
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        line1:
+          type: string
+          title: Line 1
+          description: Address line 1
+          maxLength: 50
+        line2:
+          type: string
+          title: Line 2
+          description: Address line 2
+          maxLength: 50
+        postal_code:
+          type: string
+          description: Postal code
+          maxLength: 10
+        postal_city:
+          type: string
+          title: City/Region
+          description: Postal code city/region
+          maxLength: 50
+        province:
+          type: string
+          title: State/Province
+          description: State or province
+          maxLength: 50
+        country:
+          type: string
+          description: Address country
+          maxLength: 50
+        shipping_notes:
+          type: string
+          title: Courier shipping notes
+          description: Notes for shipping courier
+          maxLength: 100
+        internal_shipping_notes:
+          type: string
+          description: Shipping notes for internal use
+          maxLength: 100
+      required:
+      - pk
+    AllUnitListResponse:
+      type: object
+      description: Serializer for the AllUnitList.
+      properties:
+        default_system:
+          type: string
+        available_systems:
+          type: array
+          items:
+            type: string
+        available_units:
+          type: object
+          additionalProperties:
+            $ref: '#/components/schemas/Unit'
+      required:
+      - available_systems
+      - available_units
+      - default_system
+    Allauth.AuthenticationMethodMethodEnum:
+      type: string
+      enum:
+      - password
+    Allauth.ConflictResponseStatusEnum:
+      type: integer
+      enum:
+      - 409
+    Allauth.ErrorResponseStatusEnum:
+      type: integer
+      enum:
+      - 400
+    Allauth.ForbiddenResponseStatusEnum:
+      type: integer
+      enum:
+      - 403
+    Allauth.RecoveryCodesAuthenticatorTypeEnum:
+      type: string
+      enum:
+      - recovery_codes
+    Allauth.SessionGoneResponseStatusEnum:
+      type: integer
+      enum:
+      - 410
+    Allauth.TOTPAuthenticatorTypeEnum:
+      type: string
+      enum:
+      - totp
+    Allauth.WebAuthnAuthenticatorTypeEnum:
+      type: string
+      enum:
+      - webauthn
+    ApiToken:
+      type: object
+      description: Serializer for the ApiToken model.
+      properties:
+        created:
+          type: string
+          format: date-time
+          readOnly: true
+        expiry:
+          type: string
+          format: date
+          title: Expiry Date
+          description: Token expiry date
+        id:
+          type: integer
+          readOnly: true
+        last_seen:
+          type: string
+          format: date
+          nullable: true
+          description: Last time the token was used
+        name:
+          type: string
+          title: Token Name
+          description: Custom token name
+          maxLength: 100
+        token:
+          type: string
+          description: |-
+            Provide a redacted version of the token.
+
+            The *raw* key value should never be displayed anywhere!
+          readOnly: true
+        active:
+          type: boolean
+          description: Test if this token is active.
+          readOnly: true
+        revoked:
+          type: boolean
+          description: Token has been revoked
+        user:
+          type: integer
+        in_use:
+          type: boolean
+          description: Return True if the token is currently used to call the endpoint.
+          readOnly: true
+      required:
+      - active
+      - created
+      - id
+      - in_use
+      - token
+    Attachment:
+      type: object
+      description: Serializer class for the Attachment model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        attachment:
+          type: string
+          format: uri
+          nullable: true
+        filename:
+          type: string
+        link:
+          type: string
+          format: uri
+          nullable: true
+          description: Link to external URL
+          maxLength: 2000
+        comment:
+          type: string
+          description: Attachment comment
+          maxLength: 250
+        upload_date:
+          type: string
+          format: date
+          readOnly: true
+        upload_user:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: User
+          description: User
+        user_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+        file_size:
+          type: integer
+          readOnly: true
+          description: File size in bytes
+        model_type:
+          $ref: '#/components/schemas/AttachmentModelTypeEnum'
+        model_id:
+          type: integer
+        tags:
+          type: array
+          items:
+            type: string
+      required:
+      - file_size
+      - model_id
+      - model_type
+      - pk
+      - upload_date
+      - user_detail
+    AttachmentModelTypeEnum:
+      enum:
+      - build
+      - company
+      - manufacturerpart
+      - purchaseorder
+      - salesorder
+      - salesordershipment
+      - returnorder
+      - part
+      - stockitem
+      type: string
+      description: |-
+        * `build` - Build Order
+        * `company` - Company
+        * `manufacturerpart` - Manufacturer Part
+        * `purchaseorder` - Purchase Order
+        * `salesorder` - Sales Order
+        * `salesordershipment` - Sales Order Shipment
+        * `returnorder` - Return Order
+        * `part` - Part
+        * `stockitem` - Stock Item
+    BOMValidate:
+      type: object
+      description: Simple serializer class for validating a single BomItem instance.
+      properties:
+        checksum:
+          type: string
+          readOnly: true
+        valid:
+          type: boolean
+          writeOnly: true
+          default: false
+          description: Validate entire Bill of Materials
+      required:
+      - checksum
+    Barcode:
+      type: object
+      description: Generic serializer for receiving barcode data.
+      properties:
+        barcode:
+          type: string
+          description: Scanned barcode data
+          maxLength: 4095
+      required:
+      - barcode
+    BarcodeAssign:
+      type: object
+      description: Serializer class for linking a barcode to an internal model.
+      properties:
+        barcode:
+          type: string
+          description: Scanned barcode data
+          maxLength: 4095
+        build:
+          type: integer
+          nullable: true
+          title: Build Order
+        supplierpart:
+          type: integer
+          nullable: true
+          title: Supplier Part
+        manufacturerpart:
+          type: integer
+          nullable: true
+          title: Manufacturer Part
+        purchaseorder:
+          type: integer
+          nullable: true
+          title: Purchase Order
+        salesorder:
+          type: integer
+          nullable: true
+          title: Sales Order
+        returnorder:
+          type: integer
+          nullable: true
+          title: Return Order
+        part:
+          type: integer
+          nullable: true
+        stockitem:
+          type: integer
+          nullable: true
+          title: Stock Item
+        stocklocation:
+          type: integer
+          nullable: true
+          title: Stock Location
+      required:
+      - barcode
+    BarcodeGenerate:
+      type: object
+      description: Serializer for generating a barcode.
+      properties:
+        model:
+          type: string
+          description: Model name to generate barcode for
+        pk:
+          type: integer
+          description: Primary key of model object to generate barcode for
+      required:
+      - model
+      - pk
+    BarcodePOAllocate:
+      type: object
+      description: |-
+        Serializer for allocating items against a purchase order.
+
+        The scanned barcode could be a Part, ManufacturerPart or SupplierPart object
+      properties:
+        barcode:
+          type: string
+          description: Scanned barcode data
+          maxLength: 4095
+        purchase_order:
+          type: integer
+          description: Purchase Order to allocate items against
+      required:
+      - barcode
+      - purchase_order
+    BarcodePOReceive:
+      type: object
+      description: |-
+        Serializer for receiving items against a purchase order.
+
+        The following additional fields may be specified:
+
+        - purchase_order: PurchaseOrder object to receive items against
+        - location: Location to receive items into
+      properties:
+        barcode:
+          type: string
+          description: Scanned barcode data
+          maxLength: 4095
+        supplier:
+          type: integer
+          nullable: true
+          description: Supplier to receive items from
+        purchase_order:
+          type: integer
+          nullable: true
+          description: PurchaseOrder to receive items against
+        location:
+          type: integer
+          nullable: true
+          description: Location to receive items into
+        line_item:
+          type: integer
+          nullable: true
+          description: Purchase order line item to receive items against
+        auto_allocate:
+          type: boolean
+          default: true
+          description: Automatically allocate stock items to the purchase order
+      required:
+      - barcode
+    BarcodeSOAllocate:
+      type: object
+      description: |-
+        Serializr for allocating stock items to a sales order.
+
+        The scanned barcode must map to a StockItem object
+      properties:
+        barcode:
+          type: string
+          description: Scanned barcode data
+          maxLength: 4095
+        sales_order:
+          type: integer
+          description: Sales Order to allocate items against
+        line:
+          type: integer
+          nullable: true
+          description: Sales order line item to allocate items against
+        shipment:
+          type: integer
+          nullable: true
+          description: Sales order shipment to allocate items against
+        quantity:
+          type: integer
+          description: Quantity to allocate
+      required:
+      - barcode
+      - sales_order
+    BarcodeScanResult:
+      type: object
+      description: Serializer for barcode scan results.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        data:
+          type: string
+          readOnly: true
+          description: Barcode data
+        timestamp:
+          type: string
+          format: date-time
+          readOnly: true
+          description: Date and time of the barcode scan
+        endpoint:
+          type: string
+          readOnly: true
+          nullable: true
+          title: Path
+          description: URL endpoint which processed the barcode
+        context:
+          readOnly: true
+          nullable: true
+          description: Context data for the barcode scan
+        response:
+          readOnly: true
+          nullable: true
+          description: Response data from the barcode scan
+        result:
+          type: boolean
+          readOnly: true
+          description: Was the barcode scan successful?
+        user:
+          type: integer
+          readOnly: true
+          nullable: true
+          description: User who scanned the barcode
+        user_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+      required:
+      - data
+      - pk
+      - result
+      - timestamp
+      - user_detail
+    BarcodeUnassign:
+      type: object
+      description: Serializer class for unlinking a barcode from an internal model.
+      properties:
+        build:
+          type: integer
+          nullable: true
+          title: Build Order
+        supplierpart:
+          type: integer
+          nullable: true
+          title: Supplier Part
+        manufacturerpart:
+          type: integer
+          nullable: true
+          title: Manufacturer Part
+        purchaseorder:
+          type: integer
+          nullable: true
+          title: Purchase Order
+        salesorder:
+          type: integer
+          nullable: true
+          title: Sales Order
+        returnorder:
+          type: integer
+          nullable: true
+          title: Return Order
+        part:
+          type: integer
+          nullable: true
+        stockitem:
+          type: integer
+          nullable: true
+          title: Stock Item
+        stocklocation:
+          type: integer
+          nullable: true
+          title: Stock Location
+    BomItem:
+      type: object
+      description: Serializer for BomItem object.
+      properties:
+        part:
+          type: integer
+          title: Assembly
+          description: Select the parent assembly
+        sub_part:
+          type: integer
+          title: Component
+          description: Select the component part
+        reference:
+          type: string
+          description: BOM item reference
+          maxLength: 5000
+        quantity:
+          type: number
+          format: double
+        overage:
+          type: string
+          description: Estimated build wastage quantity (absolute or percentage)
+          maxLength: 24
+        allow_variants:
+          type: boolean
+          description: Stock items for variant parts can be used for this BOM item
+        inherited:
+          type: boolean
+          title: Gets inherited
+          description: This BOM item is inherited by BOMs for variant parts
+        optional:
+          type: boolean
+          description: This BOM item is optional
+        consumable:
+          type: boolean
+          description: This BOM item is consumable (it is not tracked in build orders)
+        note:
+          type: string
+          description: BOM item notes
+          maxLength: 500
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+          title: Assembly
+        pricing_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        pricing_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        pricing_min_total:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        pricing_max_total:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        pricing_updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        sub_part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+          title: Component
+        substitutes:
+          type: array
+          items:
+            $ref: '#/components/schemas/BomItemSubstitute'
+          readOnly: true
+          nullable: true
+        validated:
+          type: boolean
+          description: This BOM item has been validated
+        available_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        available_substitute_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        available_variant_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        external_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        on_order:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        building:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+          title: In Production
+        can_build:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+      required:
+      - part
+      - pk
+      - quantity
+      - sub_part
+    BomItemSubstitute:
+      type: object
+      description: Serializer for the BomItemSubstitute class.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        bom_item:
+          type: integer
+          description: Parent BOM item
+        part:
+          type: integer
+          description: Substitute part
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+      required:
+      - bom_item
+      - part
+      - part_detail
+      - pk
+    BomItemValidation:
+      type: object
+      description: Simple serializer for passing a single boolean field.
+      properties:
+        valid:
+          type: boolean
+          default: false
+    BriefUserProfile:
+      type: object
+      description: Brief serializer for the UserProfile model.
+      properties:
+        displayname:
+          type: string
+          nullable: true
+          title: Display Name
+          description: Chosen display name for the user
+          maxLength: 255
+        position:
+          type: string
+          nullable: true
+          description: Main job title or position
+          maxLength: 255
+        status:
+          type: string
+          nullable: true
+          description: User status message
+          maxLength: 2000
+        location:
+          type: string
+          nullable: true
+          description: User location information
+          maxLength: 2000
+        active:
+          type: boolean
+          description: User is actively using the system
+        contact:
+          type: string
+          nullable: true
+          description: Preferred contact information for the user
+          maxLength: 255
+        type:
+          allOf:
+          - $ref: '#/components/schemas/UserTypeEnum'
+          title: User Type
+          description: |-
+            Which type of user is this?
+
+            * `bot` - Bot
+            * `internal` - Internal
+            * `external` - External
+            * `guest` - Guest
+        organisation:
+          type: string
+          nullable: true
+          description: Users primary organisation/affiliation
+          maxLength: 255
+        primary_group:
+          type: integer
+          nullable: true
+          description: Primary group for the user
+    Build:
+      type: object
+      description: Serializes a Build object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        title:
+          type: string
+          title: Description
+          description: Brief description of the build (optional)
+          maxLength: 100
+        barcode_hash:
+          type: string
+          readOnly: true
+        batch:
+          type: string
+          nullable: true
+          title: Batch Code
+          description: Batch code for this build output
+          maxLength: 100
+        creation_date:
+          type: string
+          format: date
+          readOnly: true
+        completed:
+          type: integer
+          readOnly: true
+          title: Completed items
+          description: Number of stock items which have been completed
+        completion_date:
+          type: string
+          format: date
+          nullable: true
+        destination:
+          type: integer
+          nullable: true
+          title: Destination Location
+          description: Select location where the completed items will be stored
+        parent:
+          type: integer
+          nullable: true
+          title: Parent Build
+          description: BuildOrder to which this build is allocated
+        part:
+          type: integer
+          description: Select part to build
+        part_name:
+          type: string
+          readOnly: true
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+        project_code:
+          type: integer
+          nullable: true
+          description: Project code for this build order
+        project_code_label:
+          type: string
+          readOnly: true
+          nullable: true
+        project_code_detail:
+          allOf:
+          - $ref: '#/components/schemas/ProjectCode'
+          readOnly: true
+          nullable: true
+        overdue:
+          type: boolean
+          readOnly: true
+          default: false
+        reference:
+          type: string
+        sales_order:
+          type: integer
+          nullable: true
+          title: Sales Order Reference
+          description: SalesOrder to which this build is allocated
+        quantity:
+          type: number
+          format: double
+        start_date:
+          type: string
+          format: date
+          nullable: true
+          title: Build start date
+          description: Scheduled start date for this build order
+        status:
+          allOf:
+          - $ref: '#/components/schemas/BuildStatusEnum'
+          readOnly: true
+          title: Build Status
+          description: |-
+            Build status code
+
+            * `10` - Pending
+            * `20` - Production
+            * `25` - On Hold
+            * `30` - Cancelled
+            * `40` - Complete
+        status_text:
+          type: string
+          readOnly: true
+        status_custom_key:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Custom status key
+          description: |-
+            Additional status information for this item
+
+            * `10` - Pending
+            * `20` - Production
+            * `25` - On Hold
+            * `30` - Cancelled
+            * `40` - Complete
+
+            Additional custom status keys may be retrieved from the corresponding 'status_retrieve' call.
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          title: Target completion date
+          description: Target date for build completion. Build will be overdue after
+            this date.
+        take_from:
+          type: integer
+          nullable: true
+          title: Source Location
+          description: Select location to take stock from for this build (leave blank
+            to take from any stock location)
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        link:
+          type: string
+          format: uri
+          title: External Link
+          description: Link to external URL
+          maxLength: 2000
+        issued_by:
+          type: integer
+          nullable: true
+          description: User who issued this build order
+        issued_by_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+        responsible:
+          type: integer
+          nullable: true
+          description: User or group responsible for this build order
+        responsible_detail:
+          allOf:
+          - $ref: '#/components/schemas/Owner'
+          readOnly: true
+          nullable: true
+        priority:
+          type: integer
+          minimum: 0
+          title: Build Priority
+          description: Priority of this build order
+        level:
+          type: integer
+          readOnly: true
+          title: Build Level
+        create_child_builds:
+          type: boolean
+          writeOnly: true
+          default: false
+          description: Automatically generate child build orders
+      required:
+      - barcode_hash
+      - completed
+      - creation_date
+      - issued_by_detail
+      - level
+      - overdue
+      - part
+      - part_detail
+      - part_name
+      - pk
+      - quantity
+      - reference
+      - status
+      - status_text
+    BuildAllocation:
+      type: object
+      description: DRF serializer for allocation stock items against a build order.
+      properties:
+        items:
+          type: array
+          items:
+            $ref: '#/components/schemas/BuildAllocationItem'
+      required:
+      - items
+    BuildAllocationItem:
+      type: object
+      description: A serializer for allocating a single stock item against a build
+        order.
+      properties:
+        build_line:
+          type: integer
+          title: Build Line Item
+        stock_item:
+          type: integer
+        quantity:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,10}(?:\.\d{0,5})?$
+        output:
+          type: integer
+          nullable: true
+          title: Build Output
+      required:
+      - build_line
+      - quantity
+      - stock_item
+    BuildAutoAllocation:
+      type: object
+      description: DRF serializer for auto allocating stock items against a build
+        order.
+      properties:
+        location:
+          type: integer
+          nullable: true
+          title: Source Location
+          description: Stock location where parts are to be sourced (leave blank to
+            take from any location)
+        exclude_location:
+          type: integer
+          nullable: true
+          description: Exclude stock items from this selected location
+        interchangeable:
+          type: boolean
+          default: false
+          title: Interchangeable Stock
+          description: Stock items in multiple locations can be used interchangeably
+        substitutes:
+          type: boolean
+          default: true
+          title: Substitute Stock
+          description: Allow allocation of substitute parts
+        optional_items:
+          type: boolean
+          default: false
+          description: Allocate optional BOM items to build order
+    BuildCancel:
+      type: object
+      description: Cancel an active BuildOrder.
+      properties:
+        remove_allocated_stock:
+          type: boolean
+          default: false
+          title: Consume Allocated Stock
+          description: Consume any stock which has already been allocated to this
+            build
+        remove_incomplete_outputs:
+          type: boolean
+          default: false
+          description: Delete any build outputs which have not been completed
+    BuildComplete:
+      type: object
+      description: DRF serializer for marking a BuildOrder as complete.
+      properties:
+        accept_overallocated:
+          allOf:
+          - $ref: '#/components/schemas/AcceptOverallocatedEnum'
+          default: reject
+          title: Overallocated Stock
+          description: |-
+            How do you want to handle extra stock items assigned to the build order
+
+            * `reject` - Not permitted
+            * `accept` - Accept as consumed by this build order
+            * `trim` - Deallocate before completing this build order
+        accept_unallocated:
+          type: boolean
+          default: false
+          description: Accept that stock items have not been fully allocated to this
+            build order
+        accept_incomplete:
+          type: boolean
+          default: false
+          description: Accept that the required number of build outputs have not been
+            completed
+    BuildItem:
+      type: object
+      description: Serializes a BuildItem object, which is an allocation of a stock
+        item against a build order.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        build:
+          type: integer
+          readOnly: true
+        build_line:
+          type: integer
+          nullable: true
+        install_into:
+          type: integer
+          nullable: true
+          description: Destination stock item
+        stock_item:
+          type: integer
+          description: Source stock item
+        quantity:
+          type: number
+          format: double
+          title: Allocated Quantity
+        location:
+          type: integer
+          readOnly: true
+        build_detail:
+          allOf:
+          - $ref: '#/components/schemas/Build'
+          readOnly: true
+          nullable: true
+          title: Build
+        location_detail:
+          allOf:
+          - $ref: '#/components/schemas/LocationBrief'
+          readOnly: true
+          nullable: true
+          title: Location
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+          title: Part
+        stock_item_detail:
+          allOf:
+          - $ref: '#/components/schemas/StockItemSerializerBrief'
+          readOnly: true
+          nullable: true
+          title: Stock Item
+        supplier_part_detail:
+          allOf:
+          - $ref: '#/components/schemas/SupplierPart'
+          readOnly: true
+          nullable: true
+          title: Supplier Part
+        bom_reference:
+          type: string
+          readOnly: true
+      required:
+      - bom_reference
+      - build
+      - location
+      - pk
+      - quantity
+      - stock_item
+    BuildLine:
+      type: object
+      description: Serializer for a BuildItem object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        build:
+          type: integer
+          readOnly: true
+          description: Build object
+        bom_item:
+          type: integer
+          readOnly: true
+        quantity:
+          type: number
+          format: double
+        part:
+          type: integer
+          readOnly: true
+        build_reference:
+          type: string
+          readOnly: true
+        reference:
+          type: string
+          readOnly: true
+        consumable:
+          type: boolean
+          readOnly: true
+        optional:
+          type: boolean
+          readOnly: true
+        testable:
+          type: boolean
+          readOnly: true
+        trackable:
+          type: boolean
+          readOnly: true
+        inherited:
+          type: boolean
+          readOnly: true
+        allow_variants:
+          type: boolean
+          readOnly: true
+        allocated:
+          type: number
+          format: double
+          readOnly: true
+          title: Allocated Stock
+        in_production:
+          type: number
+          format: double
+          readOnly: true
+        on_order:
+          type: number
+          format: double
+          readOnly: true
+        available_stock:
+          type: number
+          format: double
+          readOnly: true
+        available_substitute_stock:
+          type: number
+          format: double
+          readOnly: true
+        available_variant_stock:
+          type: number
+          format: double
+          readOnly: true
+        external_stock:
+          type: number
+          format: double
+          readOnly: true
+        allocations:
+          type: array
+          items:
+            $ref: '#/components/schemas/BuildItem'
+          readOnly: true
+        bom_item_detail:
+          allOf:
+          - $ref: '#/components/schemas/BomItem'
+          readOnly: true
+          title: BOM Item
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          title: Part
+        build_detail:
+          allOf:
+          - $ref: '#/components/schemas/Build'
+          readOnly: true
+          nullable: true
+          title: Build
+      required:
+      - allocated
+      - allocations
+      - allow_variants
+      - available_stock
+      - available_substitute_stock
+      - available_variant_stock
+      - bom_item
+      - bom_item_detail
+      - build
+      - build_reference
+      - consumable
+      - external_stock
+      - in_production
+      - inherited
+      - on_order
+      - optional
+      - part
+      - part_detail
+      - pk
+      - quantity
+      - reference
+      - testable
+      - trackable
+    BuildOutput:
+      type: object
+      description: |-
+        Serializer for a "BuildOutput".
+
+        Note that a "BuildOutput" is really just a StockItem which is "in production"!
+      properties:
+        output:
+          type: integer
+          title: Build Output
+      required:
+      - output
+    BuildOutputComplete:
+      type: object
+      description: DRF serializer for completing one or more build outputs.
+      properties:
+        outputs:
+          type: array
+          items:
+            $ref: '#/components/schemas/BuildOutput'
+        location:
+          type: integer
+          description: Location for completed build outputs
+        status_custom_key:
+          type: integer
+          description: |-
+            Stock item status code
+
+            * `10` - OK
+            * `50` - Attention needed
+            * `55` - Damaged
+            * `60` - Destroyed
+            * `65` - Rejected
+            * `70` - Lost
+            * `75` - Quarantined
+            * `85` - Returned
+
+            Additional custom status keys may be retrieved from the 'stock_status_retrieve' call.
+          default: 10
+          title: Status
+        accept_incomplete_allocation:
+          type: boolean
+          default: false
+          description: Complete outputs if stock has not been fully allocated
+        notes:
+          type: string
+      required:
+      - location
+      - outputs
+    BuildOutputCreate:
+      type: object
+      description: |-
+        Serializer for creating a new BuildOutput against a BuildOrder.
+
+        URL pattern is "/api/build/<pk>/create-output/", where <pk> is the PK of a Build.
+
+        The Build object is provided to the serializer context.
+      properties:
+        quantity:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,10}(?:\.\d{0,5})?$
+          description: Enter quantity for build output
+        batch_code:
+          type: string
+          description: Batch code for this build output
+        serial_numbers:
+          type: string
+          description: Enter serial numbers for build outputs
+        location:
+          type: integer
+          nullable: true
+          description: Stock location for build output
+        auto_allocate:
+          type: boolean
+          nullable: true
+          default: false
+          title: Auto Allocate Serial Numbers
+          description: Automatically allocate required items with matching serial
+            numbers
+      required:
+      - quantity
+    BuildOutputDelete:
+      type: object
+      description: DRF serializer for deleting (cancelling) one or more build outputs.
+      properties:
+        outputs:
+          type: array
+          items:
+            $ref: '#/components/schemas/BuildOutput'
+      required:
+      - outputs
+    BuildOutputQuantity:
+      type: object
+      description: Build output with quantity field.
+      properties:
+        output:
+          type: integer
+          title: Build Output
+        quantity:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,10}(?:\.\d{0,5})?$
+          description: Enter quantity for build output
+      required:
+      - output
+      - quantity
+    BuildOutputScrap:
+      type: object
+      description: Scrapping one or more build outputs.
+      properties:
+        outputs:
+          type: array
+          items:
+            $ref: '#/components/schemas/BuildOutputQuantity'
+        location:
+          type: integer
+          description: Stock location for scrapped outputs
+        discard_allocations:
+          type: boolean
+          default: false
+          description: Discard any stock allocations for scrapped outputs
+        notes:
+          type: string
+          description: Reason for scrapping build output(s)
+      required:
+      - location
+      - notes
+      - outputs
+    BuildStatusEnum:
+      enum:
+      - 10
+      - 20
+      - 25
+      - 30
+      - 40
+      type: integer
+      description: |-
+        * `10` - Pending
+        * `20` - Production
+        * `25` - On Hold
+        * `30` - Cancelled
+        * `40` - Complete
+    BuildUnallocation:
+      type: object
+      description: |-
+        DRF serializer for unallocating stock from a BuildOrder.
+
+        Allocated stock can be unallocated with a number of filters:
+
+        - output: Filter against a particular build output (blank = untracked stock)
+        - bom_item: Filter against a particular BOM line item
+      properties:
+        build_line:
+          type: integer
+          nullable: true
+        output:
+          type: integer
+          nullable: true
+          title: Build output
+    BulkRequest:
+      type: object
+      description: Parameters for selecting items for bulk operations.
+      properties:
+        items:
+          type: array
+          items:
+            type: integer
+          title: A list of primary key values
+        filters:
+          type: object
+          additionalProperties: {}
+          title: A dictionary of filter values
+    Category:
+      type: object
+      description: Serializer for PartCategory.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Name
+          maxLength: 100
+        description:
+          type: string
+          description: Description (optional)
+          maxLength: 250
+        default_location:
+          type: integer
+          nullable: true
+          description: Default location for parts in this category
+        default_keywords:
+          type: string
+          nullable: true
+          description: Default keywords for parts in this category
+          maxLength: 250
+        level:
+          type: integer
+          readOnly: true
+        parent:
+          type: integer
+          nullable: true
+          title: Parent Category
+          description: Parent part category
+        part_count:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Parts
+        subcategories:
+          type: integer
+          readOnly: true
+          nullable: true
+        pathstring:
+          type: string
+          readOnly: true
+          title: Path
+          description: Path
+        path:
+          type: array
+          items:
+            type: object
+            additionalProperties: {}
+          readOnly: true
+          nullable: true
+        starred:
+          type: boolean
+          description: Return True if the category is directly "starred" by the current
+            user.
+          readOnly: true
+        structural:
+          type: boolean
+          description: Parts may not be directly assigned to a structural category,
+            but may be assigned to child categories.
+        icon:
+          type: string
+          nullable: true
+          description: Icon (optional)
+          maxLength: 100
+        parent_default_location:
+          type: integer
+          readOnly: true
+          nullable: true
+      required:
+      - level
+      - name
+      - pathstring
+      - pk
+      - starred
+    CategoryParameterTemplate:
+      type: object
+      description: Serializer for the PartCategoryParameterTemplate model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        category:
+          type: integer
+          description: Part Category
+        category_detail:
+          allOf:
+          - $ref: '#/components/schemas/Category'
+          readOnly: true
+          nullable: true
+        parameter_template:
+          type: integer
+          description: Parameter Template
+        parameter_template_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartParameterTemplate'
+          readOnly: true
+        default_value:
+          type: string
+          description: Default Parameter Value
+          maxLength: 500
+      required:
+      - category
+      - parameter_template
+      - parameter_template_detail
+      - pk
+    CategoryTree:
+      type: object
+      description: Serializer for PartCategory tree.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Name
+          maxLength: 100
+        parent:
+          type: integer
+          nullable: true
+        icon:
+          type: string
+          description: Icon (optional)
+          maxLength: 100
+        structural:
+          type: boolean
+          description: Parts may not be directly assigned to a structural category,
+            but may be assigned to child categories.
+        subcategories:
+          type: integer
+          readOnly: true
+      required:
+      - name
+      - pk
+      - subcategories
+    ColorEnum:
+      enum:
+      - primary
+      - secondary
+      - success
+      - danger
+      - warning
+      - info
+      - dark
+      type: string
+      description: |-
+        * `primary` - primary
+        * `secondary` - secondary
+        * `success` - success
+        * `danger` - danger
+        * `warning` - warning
+        * `info` - info
+        * `dark` - dark
+    Company:
+      type: object
+      description: Serializer for Company object (full detail).
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          title: Company name
+          description: Company name
+          maxLength: 100
+        description:
+          type: string
+          title: Company description
+          description: Description of the company
+          maxLength: 500
+        website:
+          type: string
+          format: uri
+          description: Company website URL
+          maxLength: 2000
+        phone:
+          type: string
+          title: Phone number
+          description: Contact phone number
+          maxLength: 50
+        address:
+          type: string
+          readOnly: true
+          nullable: true
+          title: Return the string representation for the primary address. This property
+            exists for backwards compatibility.
+        email:
+          type: string
+          format: email
+          nullable: true
+          default: ''
+        currency:
+          type: string
+          description: |-
+            Default currency used for this supplier
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        contact:
+          type: string
+          description: Point of contact
+          maxLength: 100
+        link:
+          type: string
+          format: uri
+          description: Link to external company information
+          maxLength: 2000
+        image:
+          type: string
+          format: uri
+          nullable: true
+        active:
+          type: boolean
+          description: Is this company active?
+        is_customer:
+          type: boolean
+          description: Do you sell items to this company?
+        is_manufacturer:
+          type: boolean
+          description: Does this company manufacture parts?
+        is_supplier:
+          type: boolean
+          description: Do you purchase items from this company?
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        parts_supplied:
+          type: integer
+          readOnly: true
+        parts_manufactured:
+          type: integer
+          readOnly: true
+        remote_image:
+          type: string
+          format: uri
+          writeOnly: true
+          description: URL of remote image file
+        address_count:
+          type: integer
+          readOnly: true
+        primary_address:
+          allOf:
+          - $ref: '#/components/schemas/Address'
+          readOnly: true
+          nullable: true
+      required:
+      - address_count
+      - currency
+      - name
+      - parts_manufactured
+      - parts_supplied
+      - pk
+    CompanyBrief:
+      type: object
+      description: Serializer for Company object (limited detail).
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        active:
+          type: boolean
+          description: Is this company active?
+        name:
+          type: string
+          title: Company name
+          description: Company name
+          maxLength: 100
+        description:
+          type: string
+          title: Company description
+          description: Description of the company
+          maxLength: 500
+        image:
+          type: string
+          format: uri
+          readOnly: true
+        thumbnail:
+          type: string
+          readOnly: true
+        currency:
+          type: string
+          readOnly: true
+          description: Default currency used for this company
+      required:
+      - currency
+      - image
+      - name
+      - pk
+      - thumbnail
+    ConfigTypeEnum:
+      enum:
+      - M
+      - D
+      type: string
+      description: |-
+        * `M` - Machine
+        * `D` - Driver
+    Contact:
+      type: object
+      description: Serializer class for the Contact model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        company:
+          type: integer
+        company_name:
+          type: string
+          readOnly: true
+        name:
+          type: string
+          maxLength: 100
+        phone:
+          type: string
+          maxLength: 100
+        email:
+          type: string
+          format: email
+          maxLength: 254
+        role:
+          type: string
+          maxLength: 100
+      required:
+      - company
+      - company_name
+      - name
+      - pk
+    ContentType:
+      type: object
+      description: Serializer for ContentType models.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+        app_label:
+          type: string
+          readOnly: true
+        model:
+          type: string
+          readOnly: true
+        app_labeled_name:
+          type: string
+          readOnly: true
+        is_plugin:
+          type: boolean
+          description: Return True if the model is a plugin model.
+          readOnly: true
+      required:
+      - app_label
+      - app_labeled_name
+      - is_plugin
+      - model
+      - pk
+    ConvertStockItem:
+      type: object
+      description: DRF serializer class for converting a StockItem to a valid variant
+        part.
+      properties:
+        part:
+          type: integer
+          description: Select part to convert stock item into
+      required:
+      - part
+    CurrencyExchange:
+      type: object
+      description: |-
+        Serializer for a Currency Exchange request.
+
+        It's only purpose is describing the results correctly in the API schema right now.
+      properties:
+        base_currency:
+          type: string
+          readOnly: true
+        exchange_rates:
+          type: object
+          additionalProperties:
+            type: number
+            format: double
+        updated:
+          type: string
+          format: date-time
+          readOnly: true
+      required:
+      - base_currency
+      - exchange_rates
+      - updated
+    CustomState:
+      type: object
+      description: Serializer for the custom state model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: integer
+          title: Value
+          description: Numerical value that will be saved in the models database
+        name:
+          type: string
+          description: Name of the state
+          maxLength: 250
+        label:
+          type: string
+          description: Label that will be displayed in the frontend
+          maxLength: 250
+        color:
+          allOf:
+          - $ref: '#/components/schemas/ColorEnum'
+          description: |-
+            Color that will be displayed in the frontend
+
+            * `primary` - primary
+            * `secondary` - secondary
+            * `success` - success
+            * `danger` - danger
+            * `warning` - warning
+            * `info` - info
+            * `dark` - dark
+        logical_key:
+          type: integer
+          description: State logical key that is equal to this custom state in business
+            logic
+        model:
+          type: integer
+          nullable: true
+          description: Model this state is associated with
+        model_name:
+          type: string
+          readOnly: true
+        reference_status:
+          $ref: '#/components/schemas/ReferenceStatusEnum'
+      required:
+      - key
+      - label
+      - logical_key
+      - model_name
+      - name
+      - pk
+      - reference_status
+    CustomUnit:
+      type: object
+      description: DRF serializer for CustomUnit model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Unit name
+          maxLength: 50
+        symbol:
+          type: string
+          description: Optional unit symbol
+          maxLength: 10
+        definition:
+          type: string
+          description: Unit definition
+          maxLength: 50
+      required:
+      - definition
+      - name
+      - pk
+    Customize:
+      type: object
+      description: Serializer for customize field.
+      properties:
+        logo:
+          type: string
+        splash:
+          type: string
+        login_message:
+          type: string
+          nullable: true
+        navbar_message:
+          type: string
+          nullable: true
+      required:
+      - login_message
+      - logo
+      - navbar_message
+      - splash
+    DataImportAcceptRow:
+      type: object
+      description: Serializer for accepting rows of data.
+      properties:
+        rows:
+          type: array
+          items:
+            type: integer
+            title: Rows
+          description: List of row IDs to accept
+      required:
+      - rows
+    DataImportColumnMap:
+      type: object
+      description: Serializer for the DataImportColumnMap model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        session:
+          type: integer
+          readOnly: true
+          title: Import Session
+        column:
+          type: string
+          maxLength: 100
+        field:
+          type: string
+          readOnly: true
+        label:
+          type: string
+          readOnly: true
+        description:
+          type: string
+          readOnly: true
+      required:
+      - description
+      - field
+      - label
+      - pk
+      - session
+    DataImportRow:
+      type: object
+      description: Serializer for the DataImportRow model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        session:
+          type: integer
+          readOnly: true
+          title: Import Session
+        row_index:
+          type: integer
+          readOnly: true
+        row_data:
+          readOnly: true
+          nullable: true
+          title: Original row data
+        data:
+          nullable: true
+        errors:
+          readOnly: true
+          nullable: true
+        valid:
+          type: boolean
+          readOnly: true
+        complete:
+          type: boolean
+          readOnly: true
+      required:
+      - complete
+      - pk
+      - row_index
+      - session
+      - valid
+    DataImportSession:
+      type: object
+      description: Serializer for the DataImportSession model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        timestamp:
+          type: string
+          format: date-time
+          readOnly: true
+        data_file:
+          type: string
+          format: uri
+        model_type:
+          $ref: '#/components/schemas/DataImportSessionModelTypeEnum'
+        available_fields:
+          readOnly: true
+        status:
+          allOf:
+          - $ref: '#/components/schemas/DataImportSessionStatusEnum'
+          readOnly: true
+          description: |-
+            Import status
+
+            * `0` - Initializing
+            * `10` - Mapping Columns
+            * `20` - Importing Data
+            * `30` - Processing Data
+            * `40` - Complete
+        user:
+          type: integer
+          readOnly: true
+          nullable: true
+        user_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+        columns:
+          readOnly: true
+          nullable: true
+        column_mappings:
+          type: array
+          items:
+            $ref: '#/components/schemas/DataImportColumnMap'
+          readOnly: true
+        field_defaults:
+          nullable: true
+        field_overrides:
+          nullable: true
+        field_filters:
+          nullable: true
+        row_count:
+          type: integer
+          readOnly: true
+        completed_row_count:
+          type: integer
+          readOnly: true
+      required:
+      - available_fields
+      - column_mappings
+      - completed_row_count
+      - data_file
+      - model_type
+      - pk
+      - row_count
+      - status
+      - timestamp
+      - user_detail
+    DataImportSessionModelTypeEnum:
+      enum:
+      - partcategory
+      - parttesttemplate
+      - partsellpricebreak
+      - partparametertemplate
+      - partparameter
+      - part
+      - bomitem
+      - partcategoryparametertemplate
+      - address
+      - company
+      - contact
+      - manufacturerpart
+      - manufacturerpartparameter
+      - supplierpart
+      - supplierpricebreak
+      - projectcode
+      - inventreecustomuserstatemodel
+      - customunit
+      - stockitemtestresult
+      - stockitem
+      - stocklocation
+      - stockitemtracking
+      - purchaseorder
+      - purchaseorderlineitem
+      - purchaseorderextraline
+      - salesorder
+      - salesorderlineitem
+      - salesorderextraline
+      - returnorder
+      - returnorderlineitem
+      - returnorderextraline
+      type: string
+      description: |-
+        * `partcategory` - Part Category
+        * `parttesttemplate` - Part Test Template
+        * `partsellpricebreak` - Part Sale Price Break
+        * `partparametertemplate` - Part Parameter Template
+        * `partparameter` - Part Parameter
+        * `part` - Part
+        * `bomitem` - BOM Item
+        * `partcategoryparametertemplate` - Part Category Parameter Template
+        * `address` - Address
+        * `company` - Company
+        * `contact` - Contact
+        * `manufacturerpart` - Manufacturer Part
+        * `manufacturerpartparameter` - Manufacturer Part Parameter
+        * `supplierpart` - Supplier Part
+        * `supplierpricebreak` - Supplier Price Break
+        * `projectcode` - Project Code
+        * `inventreecustomuserstatemodel` - Custom State
+        * `customunit` - Custom Unit
+        * `stockitemtestresult` - Stock Item Test Result
+        * `stockitem` - Stock Item
+        * `stocklocation` - Stock Location
+        * `stockitemtracking` - Stock Item Tracking
+        * `purchaseorder` - Purchase Order
+        * `purchaseorderlineitem` - Purchase Order Line Item
+        * `purchaseorderextraline` - Purchase Order Extra Line
+        * `salesorder` - Sales Order
+        * `salesorderlineitem` - Sales Order Line Item
+        * `salesorderextraline` - Sales Order Extra Line
+        * `returnorder` - Return Order
+        * `returnorderlineitem` - Return Order Line Item
+        * `returnorderextraline` - Return Order Extra Line
+    DataImportSessionStatusEnum:
+      enum:
+      - 0
+      - 10
+      - 20
+      - 30
+      - 40
+      type: integer
+      description: |-
+        * `0` - Initializing
+        * `10` - Mapping Columns
+        * `20` - Importing Data
+        * `30` - Processing Data
+        * `40` - Complete
+    DataImporterModel:
+      type: object
+      description: Model references to map info that might get imported.
+      properties:
+        serializer:
+          type: string
+          readOnly: true
+        model_type:
+          type: string
+          readOnly: true
+        api_url:
+          type: string
+          format: uri
+          readOnly: true
+          nullable: true
+      required:
+      - model_type
+      - serializer
+    DataOutput:
+      type: object
+      description: Serializer for the DataOutput model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        created:
+          type: string
+          format: date
+          readOnly: true
+        user:
+          type: integer
+          nullable: true
+        user_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+        total:
+          type: integer
+        progress:
+          type: integer
+        complete:
+          type: boolean
+        output_type:
+          type: string
+          nullable: true
+          maxLength: 100
+        template_name:
+          type: string
+          nullable: true
+          maxLength: 100
+        plugin:
+          type: string
+          nullable: true
+          maxLength: 100
+        output:
+          type: string
+          format: uri
+          readOnly: true
+          nullable: true
+        errors:
+          nullable: true
+      required:
+      - created
+      - pk
+      - user_detail
+    DefaultLocation:
+      type: object
+      description: |-
+        Brief serializer for a StockLocation object.
+
+        Defined here, rather than stock.serializers, to negotiate circular imports.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Name
+          maxLength: 100
+        pathstring:
+          type: string
+          title: Path
+          description: Path
+          maxLength: 250
+      required:
+      - name
+      - pk
+    DuplicateOrder:
+      type: object
+      description: Serializer for specifying options when duplicating an order.
+      properties:
+        order_id:
+          type: integer
+          description: ID of the order to duplicate
+        copy_lines:
+          type: boolean
+          default: true
+          description: Copy line items from the original order
+        copy_extra_lines:
+          type: boolean
+          default: true
+          description: Copy extra line items from the original order
+      required:
+      - order_id
+    DuplicatePart:
+      type: object
+      description: |-
+        Serializer for specifying options when duplicating a Part.
+
+        The fields in this serializer control how the Part is duplicated.
+      properties:
+        part:
+          type: integer
+          title: Original Part
+          description: Select original part to duplicate
+        copy_image:
+          type: boolean
+          default: false
+          description: Copy image from original part
+        copy_bom:
+          type: boolean
+          default: false
+          description: Copy bill of materials from original part
+        copy_parameters:
+          type: boolean
+          default: false
+          description: Copy parameter data from original part
+        copy_notes:
+          type: boolean
+          default: true
+          description: Copy notes from original part
+      required:
+      - part
+    ErrorMessage:
+      type: object
+      description: DRF serializer for server error messages.
+      properties:
+        when:
+          type: string
+          format: date-time
+          readOnly: true
+        info:
+          type: string
+          readOnly: true
+        data:
+          type: string
+          readOnly: true
+          nullable: true
+        path:
+          type: string
+          format: uri
+          readOnly: true
+          nullable: true
+          maxLength: 200
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+      required:
+      - info
+      - pk
+      - when
+    ExtendedUser:
+      type: object
+      description: Serializer for a User with a bit more info.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        username:
+          type: string
+          description: Username
+        first_name:
+          type: string
+          description: First name of the user
+        last_name:
+          type: string
+          description: Last name of the user
+        email:
+          type: string
+          format: email
+          description: Email address of the user
+        groups:
+          type: array
+          items:
+            $ref: '#/components/schemas/Group'
+          readOnly: true
+        group_ids:
+          type: array
+          items:
+            type: integer
+            writeOnly: true
+          writeOnly: true
+        is_staff:
+          type: boolean
+          title: Staff
+          description: Does this user have staff permissions
+        is_superuser:
+          type: boolean
+          title: Superuser
+          description: Is this user a superuser
+        is_active:
+          type: boolean
+          title: Active
+          description: Is this user account active
+        profile:
+          allOf:
+          - $ref: '#/components/schemas/BriefUserProfile'
+          readOnly: true
+      required:
+      - email
+      - first_name
+      - groups
+      - last_name
+      - pk
+      - profile
+      - username
+    FailedTask:
+      type: object
+      description: Serializer for an individual failed task object.
+      properties:
+        pk:
+          type: string
+          readOnly: true
+        name:
+          type: string
+          readOnly: true
+        func:
+          type: string
+          maxLength: 256
+        args:
+          type: string
+          readOnly: true
+          nullable: true
+        kwargs:
+          type: string
+          readOnly: true
+          nullable: true
+        started:
+          type: string
+          format: date-time
+          readOnly: true
+        stopped:
+          type: string
+          format: date-time
+          readOnly: true
+        attempt_count:
+          type: integer
+        result:
+          type: string
+      required:
+      - func
+      - name
+      - pk
+      - result
+      - started
+      - stopped
+    FlowsEnum:
+      type: string
+      enum:
+      - provider_redirect
+      - provider_token
+    GenerateBatchCode:
+      type: object
+      description: |-
+        Serializer for generating a batch code.
+
+        Any of the provided write-only fields can be used for additional context.
+      properties:
+        batch_code:
+          type: string
+          readOnly: true
+          description: Generated batch code
+        build_order:
+          type: integer
+          nullable: true
+          description: Select build order
+        item:
+          type: integer
+          nullable: true
+          title: Stock Item
+          description: Select stock item to generate batch code for
+        location:
+          type: integer
+          nullable: true
+          description: Select location to generate batch code for
+        part:
+          type: integer
+          nullable: true
+          description: Select part to generate batch code for
+        purchase_order:
+          type: integer
+          nullable: true
+          description: Select purchase order
+        quantity:
+          type: number
+          format: double
+          nullable: true
+          description: Enter quantity for batch code
+      required:
+      - batch_code
+    GenerateSerialNumber:
+      type: object
+      description: |-
+        Serializer for generating one or multiple serial numbers.
+
+        Any of the provided write-only fields can be used for additional context.
+
+        Note that in the case where multiple serial numbers are required,
+        the "serial" field will return a string with multiple serial numbers separated by a comma.
+      properties:
+        serial:
+          type: string
+          readOnly: true
+          title: Serial Number
+          description: Generated serial number
+        part:
+          type: integer
+          nullable: true
+          description: Select part to generate serial number for
+        quantity:
+          type: integer
+          default: 1
+          description: Quantity of serial numbers to generate
+      required:
+      - serial
+    GenericStateClass:
+      type: object
+      description: API serializer for generic state class information.
+      properties:
+        status_class:
+          type: string
+          readOnly: true
+          title: Class
+        values:
+          type: object
+          additionalProperties:
+            $ref: '#/components/schemas/GenericStateValue'
+      required:
+      - status_class
+      - values
+    GenericStateValue:
+      type: object
+      description: API serializer for generic state information.
+      properties:
+        key:
+          type: integer
+        logical_key:
+          type: string
+        name:
+          type: string
+        label:
+          type: string
+        color:
+          type: string
+        custom:
+          type: boolean
+      required:
+      - key
+      - label
+      - name
+    GetAuthToken:
+      type: object
+      description: Serializer for the GetAuthToken API endpoint.
+      properties:
+        token:
+          type: string
+          readOnly: true
+        name:
+          type: string
+        expiry:
+          type: string
+          format: date
+          readOnly: true
+      required:
+      - expiry
+      - name
+      - token
+    GetSimpleLogin:
+      type: object
+      description: Serializer for the simple login view.
+      properties:
+        email:
+          type: string
+      required:
+      - email
+    GlobalSettings:
+      type: object
+      description: Serializer for the InvenTreeSetting model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          readOnly: true
+        value:
+          type: string
+          nullable: true
+        name:
+          type: string
+          readOnly: true
+        description:
+          type: string
+          readOnly: true
+        type:
+          type: string
+          readOnly: true
+        units:
+          type: string
+          readOnly: true
+        choices:
+          type: array
+          items: {}
+          description: Returns the choices available for a given item.
+          readOnly: true
+        model_name:
+          type: string
+          readOnly: true
+          nullable: true
+        api_url:
+          type: string
+          readOnly: true
+          nullable: true
+        typ:
+          type: string
+          readOnly: true
+      required:
+      - choices
+      - description
+      - key
+      - name
+      - pk
+      - typ
+      - type
+      - units
+      - value
+    Group:
+      type: object
+      description: Serializer for a 'Group'.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          maxLength: 150
+        permissions:
+          type: object
+          additionalProperties: {}
+          description: Return a list of permissions associated with the group.
+          readOnly: true
+          nullable: true
+        roles:
+          type: array
+          items:
+            $ref: '#/components/schemas/RuleSet'
+          readOnly: true
+          nullable: true
+        users:
+          type: array
+          items:
+            $ref: '#/components/schemas/User'
+          readOnly: true
+          nullable: true
+      required:
+      - name
+      - pk
+    Icon:
+      type: object
+      description: Serializer for an icon.
+      properties:
+        name:
+          type: string
+        category:
+          type: string
+        tags:
+          type: array
+          items:
+            type: string
+        variants:
+          type: object
+          additionalProperties:
+            type: string
+      required:
+      - category
+      - name
+      - tags
+      - variants
+    IconPackage:
+      type: object
+      description: Serializer for a list of icons.
+      properties:
+        name:
+          type: string
+        prefix:
+          type: string
+        fonts:
+          type: object
+          additionalProperties:
+            type: string
+        icons:
+          type: object
+          additionalProperties:
+            $ref: '#/components/schemas/Icon'
+      required:
+      - fonts
+      - icons
+      - name
+      - prefix
+    IdEnum:
+      type: string
+      enum:
+      - verify_email
+      - login
+      - signup
+      - provider_redirect
+      - provider_signup
+      - provider_token
+      - mfa_authenticate
+      - reauthenticate
+      - mfa_reauthenticate
+    InfoApi:
+      type: object
+      description: InvenTree server information - some information might be blanked
+        if called without elevated credentials.
+      properties:
+        server:
+          type: string
+          readOnly: true
+        id:
+          type: string
+          readOnly: true
+          nullable: true
+        version:
+          type: string
+          readOnly: true
+        instance:
+          type: string
+          readOnly: true
+        apiVersion:
+          type: integer
+          readOnly: true
+        worker_running:
+          type: boolean
+          readOnly: true
+        worker_count:
+          type: integer
+          readOnly: true
+        worker_pending_tasks:
+          type: integer
+          readOnly: true
+        plugins_enabled:
+          type: boolean
+          readOnly: true
+        plugins_install_disabled:
+          type: boolean
+          readOnly: true
+        active_plugins:
+          readOnly: true
+        email_configured:
+          type: boolean
+          readOnly: true
+        debug_mode:
+          type: boolean
+          readOnly: true
+        docker_mode:
+          type: boolean
+          readOnly: true
+        default_locale:
+          type: string
+          readOnly: true
+        customize:
+          allOf:
+          - $ref: '#/components/schemas/Customize'
+          readOnly: true
+        system_health:
+          type: boolean
+          readOnly: true
+        database:
+          type: string
+          readOnly: true
+        platform:
+          type: string
+          readOnly: true
+        installer:
+          type: string
+          readOnly: true
+        target:
+          type: string
+          readOnly: true
+          nullable: true
+        django_admin:
+          type: string
+          readOnly: true
+        settings:
+          allOf:
+          - $ref: '#/components/schemas/Settings'
+          readOnly: true
+      required:
+      - active_plugins
+      - apiVersion
+      - customize
+      - database
+      - debug_mode
+      - default_locale
+      - django_admin
+      - docker_mode
+      - email_configured
+      - installer
+      - instance
+      - platform
+      - plugins_enabled
+      - plugins_install_disabled
+      - server
+      - settings
+      - system_health
+      - version
+      - worker_count
+      - worker_pending_tasks
+      - worker_running
+    InitialStock:
+      type: object
+      description: Serializer for creating initial stock quantity.
+      properties:
+        quantity:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,10}(?:\.\d{0,5})?$
+          title: Initial Stock Quantity
+          description: Specify initial stock quantity for this Part. If quantity is
+            zero, no stock is added.
+        location:
+          type: integer
+          nullable: true
+          title: Initial Stock Location
+          description: Specify initial stock location for this Part
+      required:
+      - quantity
+    InitialSupplier:
+      type: object
+      description: Serializer for adding initial supplier / manufacturer information.
+      properties:
+        supplier:
+          type: integer
+          nullable: true
+          description: Select supplier (or leave blank to skip)
+        sku:
+          type: string
+          description: Supplier stock keeping unit
+          maxLength: 100
+        manufacturer:
+          type: integer
+          nullable: true
+          description: Select manufacturer (or leave blank to skip)
+        mpn:
+          type: string
+          description: Manufacturer part number
+          maxLength: 100
+    InstallStockItem:
+      type: object
+      description: Serializer for installing a stock item into a given part.
+      properties:
+        stock_item:
+          type: integer
+          description: Select stock item to install
+        quantity:
+          type: integer
+          minimum: 1
+          default: 1
+          title: Quantity to Install
+          description: Enter the quantity of items to install
+        note:
+          type: string
+          description: Add transaction note (optional)
+      required:
+      - stock_item
+    IsTrueEnum:
+      type: boolean
+      enum:
+      - true
+    LabelPrint:
+      type: object
+      description: Serializer class for printing a label.
+      properties:
+        template:
+          type: integer
+          description: Select label template
+        plugin:
+          type: string
+          title: Printing Plugin
+          description: Select plugin to use for label printing
+        items:
+          type: array
+          items:
+            type: integer
+          description: List of item primary keys to include in the report
+      required:
+      - items
+      - template
+    LabelTemplate:
+      type: object
+      description: Serializer class for label template model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Template name
+          maxLength: 100
+        description:
+          type: string
+          description: Template description
+          maxLength: 250
+        model_type:
+          $ref: '#/components/schemas/TemplateModelTypeEnum'
+        template:
+          type: string
+          format: uri
+        filters:
+          type: string
+          description: Template query filters (comma-separated list of key=value pairs)
+          maxLength: 250
+        filename_pattern:
+          type: string
+          description: Pattern for generating filenames
+          maxLength: 100
+        enabled:
+          type: boolean
+          description: Template is enabled
+        revision:
+          type: integer
+          readOnly: true
+        attach_to_model:
+          type: boolean
+          title: Attach to Model on Print
+          description: Save report output as an attachment against linked model instance
+            when printing
+        width:
+          type: number
+          format: double
+          minimum: 2
+          title: Width [mm]
+          description: Label width, specified in mm
+        height:
+          type: number
+          format: double
+          minimum: 2
+          title: Height [mm]
+          description: Label height, specified in mm
+      required:
+      - description
+      - model_type
+      - name
+      - pk
+      - revision
+      - template
+    LicenseView:
+      type: object
+      description: Serializer for license information.
+      properties:
+        backend:
+          type: array
+          items: {}
+          readOnly: true
+          description: Backend licenses texts
+        frontend:
+          type: array
+          items: {}
+          readOnly: true
+          description: Frontend licenses texts
+      required:
+      - backend
+      - frontend
+    Link:
+      type: object
+      description: Serializer for all possible links.
+      properties:
+        doc:
+          type: string
+          format: uri
+        code:
+          type: string
+          format: uri
+        app:
+          type: string
+          format: uri
+        bug:
+          type: string
+          format: uri
+      required:
+      - app
+      - bug
+      - code
+      - doc
+    LocatePlugin:
+      type: object
+      description: Serializer for the LocatePluginView API endpoint.
+      properties:
+        plugin:
+          type: string
+          description: Plugin to use for location identification
+        item:
+          type: integer
+          description: StockItem to identify
+        location:
+          type: integer
+          description: StockLocation to identify
+      required:
+      - plugin
+    Location:
+      type: object
+      description: Detailed information about a stock location.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        barcode_hash:
+          type: string
+          readOnly: true
+          description: Unique hash of barcode data
+        name:
+          type: string
+          description: Name
+          maxLength: 100
+        level:
+          type: integer
+          readOnly: true
+        description:
+          type: string
+          description: Description (optional)
+          maxLength: 250
+        parent:
+          type: integer
+          nullable: true
+          title: Parent Location
+          description: Parent stock location
+        pathstring:
+          type: string
+          readOnly: true
+          title: Path
+          description: Path
+        path:
+          type: array
+          items:
+            type: object
+            additionalProperties: {}
+          readOnly: true
+          nullable: true
+        items:
+          type: integer
+          readOnly: true
+          title: Stock Items
+        sublocations:
+          type: integer
+          readOnly: true
+        owner:
+          type: integer
+          nullable: true
+          description: Select Owner
+        icon:
+          type: string
+          readOnly: true
+        custom_icon:
+          type: string
+          nullable: true
+          title: Icon
+          description: Icon (optional)
+          maxLength: 100
+        structural:
+          type: boolean
+          description: Stock items may not be directly located into a structural stock
+            locations, but may be located to child locations.
+        external:
+          type: boolean
+          description: This is an external stock location
+        location_type:
+          type: integer
+          nullable: true
+          description: Stock location type of this location
+        location_type_detail:
+          allOf:
+          - $ref: '#/components/schemas/StockLocationType'
+          readOnly: true
+          nullable: true
+        tags:
+          type: array
+          items:
+            type: string
+      required:
+      - barcode_hash
+      - icon
+      - items
+      - level
+      - name
+      - pathstring
+      - pk
+      - sublocations
+    LocationBrief:
+      type: object
+      description: Provides a brief serializer for a StockLocation object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Name
+          maxLength: 100
+        pathstring:
+          type: string
+          title: Path
+          description: Path
+          maxLength: 250
+      required:
+      - name
+      - pk
+    LocationTree:
+      type: object
+      description: Serializer for a simple tree view.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Name
+          maxLength: 100
+        parent:
+          type: integer
+          nullable: true
+        icon:
+          type: string
+          description: |-
+            Get the current icon used for this location.
+
+            The icon field on this model takes precedences over the possibly assigned stock location type
+          readOnly: true
+        structural:
+          type: boolean
+          description: Stock items may not be directly located into a structural stock
+            locations, but may be located to child locations.
+        sublocations:
+          type: integer
+          readOnly: true
+      required:
+      - icon
+      - name
+      - pk
+      - sublocations
+    LoginMethodsEnum:
+      type: string
+      enum:
+      - email
+      - username
+    MachineConfig:
+      type: object
+      description: Serializer for a MachineConfig.
+      properties:
+        pk:
+          type: string
+          format: uuid
+          readOnly: true
+          title: Id
+        name:
+          type: string
+          description: Name of machine
+          maxLength: 255
+        machine_type:
+          type: string
+          readOnly: true
+          description: Type of machine
+        driver:
+          type: string
+          readOnly: true
+          description: Driver used for the machine
+        initialized:
+          type: boolean
+          description: Serializer method for the initialized field.
+          readOnly: true
+        active:
+          type: boolean
+          description: Machines can be disabled
+        status:
+          type: integer
+          description: Serializer method for the status field.
+          readOnly: true
+        status_model:
+          type: string
+          nullable: true
+          description: Serializer method for the status model field.
+          readOnly: true
+        status_text:
+          type: string
+          description: Serializer method for the status text field.
+          readOnly: true
+        machine_errors:
+          type: array
+          items:
+            type: string
+          description: Serializer method for the errors field.
+          readOnly: true
+        is_driver_available:
+          type: boolean
+          description: Serializer method for the is_driver_available field.
+          readOnly: true
+        restart_required:
+          type: boolean
+          description: Serializer method for the restart_required field.
+          readOnly: true
+      required:
+      - driver
+      - initialized
+      - is_driver_available
+      - machine_errors
+      - machine_type
+      - name
+      - pk
+      - restart_required
+      - status
+      - status_text
+    MachineConfigCreate:
+      type: object
+      description: Serializer for creating a MachineConfig.
+      properties:
+        pk:
+          type: string
+          format: uuid
+          readOnly: true
+          title: Id
+        name:
+          type: string
+          description: Name of machine
+          maxLength: 255
+        machine_type:
+          type: string
+          description: Type of machine
+          maxLength: 255
+        driver:
+          type: string
+          description: Driver used for the machine
+          maxLength: 255
+        initialized:
+          type: boolean
+          description: Serializer method for the initialized field.
+          readOnly: true
+        active:
+          type: boolean
+          description: Machines can be disabled
+        status:
+          type: integer
+          description: Serializer method for the status field.
+          readOnly: true
+        status_model:
+          type: string
+          nullable: true
+          description: Serializer method for the status model field.
+          readOnly: true
+        status_text:
+          type: string
+          description: Serializer method for the status text field.
+          readOnly: true
+        machine_errors:
+          type: array
+          items:
+            type: string
+          description: Serializer method for the errors field.
+          readOnly: true
+        is_driver_available:
+          type: boolean
+          description: Serializer method for the is_driver_available field.
+          readOnly: true
+        restart_required:
+          type: boolean
+          description: Serializer method for the restart_required field.
+          readOnly: true
+      required:
+      - driver
+      - initialized
+      - is_driver_available
+      - machine_errors
+      - machine_type
+      - name
+      - pk
+      - restart_required
+      - status
+      - status_text
+    MachineDriver:
+      type: object
+      description: Serializer for a BaseMachineDriver class.
+      properties:
+        slug:
+          type: string
+          pattern: ^[-a-zA-Z0-9_]+$
+        name:
+          type: string
+        description:
+          type: string
+        provider_file:
+          type: string
+          description: Serializer method for the provider_file field.
+          readOnly: true
+        provider_plugin:
+          type: object
+          additionalProperties: {}
+          nullable: true
+          description: Serializer method for the provider_plugin field.
+          readOnly: true
+        is_builtin:
+          type: boolean
+          description: Serializer method for the is_builtin field.
+          readOnly: true
+        machine_type:
+          type: string
+          readOnly: true
+          pattern: ^[-a-zA-Z0-9_]+$
+        driver_errors:
+          type: array
+          items:
+            type: string
+          description: Serializer method for the errors field.
+          readOnly: true
+      required:
+      - description
+      - driver_errors
+      - is_builtin
+      - machine_type
+      - name
+      - provider_file
+      - slug
+    MachineRegistryError:
+      type: object
+      description: Serializer for a machine registry error.
+      properties:
+        message:
+          type: string
+      required:
+      - message
+    MachineRegistryStatus:
+      type: object
+      description: Serializer for machine registry status.
+      properties:
+        registry_errors:
+          type: array
+          items:
+            $ref: '#/components/schemas/MachineRegistryError'
+      required:
+      - registry_errors
+    MachineRestart:
+      type: object
+      description: Serializer for the machine restart response.
+      properties:
+        ok:
+          type: boolean
+      required:
+      - ok
+    MachineSetting:
+      type: object
+      description: Serializer for the MachineSetting model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          readOnly: true
+        value:
+          type: string
+          nullable: true
+        name:
+          type: string
+          readOnly: true
+        description:
+          type: string
+          readOnly: true
+        type:
+          type: string
+          readOnly: true
+        choices:
+          type: array
+          items: {}
+          description: Returns the choices available for a given item.
+          readOnly: true
+        model_name:
+          type: string
+          readOnly: true
+          nullable: true
+        model_filters:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        api_url:
+          type: string
+          readOnly: true
+          nullable: true
+        typ:
+          type: string
+          readOnly: true
+        required:
+          type: boolean
+          readOnly: true
+        config_type:
+          allOf:
+          - $ref: '#/components/schemas/ConfigTypeEnum'
+          readOnly: true
+      required:
+      - choices
+      - config_type
+      - description
+      - key
+      - model_filters
+      - name
+      - pk
+      - required
+      - typ
+      - type
+      - value
+    MachineType:
+      type: object
+      description: Serializer for a BaseMachineType class.
+      properties:
+        slug:
+          type: string
+          pattern: ^[-a-zA-Z0-9_]+$
+        name:
+          type: string
+        description:
+          type: string
+        provider_file:
+          type: string
+          description: Serializer method for the provider_file field.
+          readOnly: true
+        provider_plugin:
+          type: object
+          additionalProperties: {}
+          nullable: true
+          description: Serializer method for the provider_plugin field.
+          readOnly: true
+        is_builtin:
+          type: boolean
+          description: Serializer method for the is_builtin field.
+          readOnly: true
+      required:
+      - description
+      - is_builtin
+      - name
+      - provider_file
+      - slug
+    ManufacturerPart:
+      type: object
+      description: Serializer for ManufacturerPart object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+          title: Base Part
+          description: Select part
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+        pretty_name:
+          type: string
+          readOnly: true
+          nullable: true
+        manufacturer:
+          type: integer
+        manufacturer_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        description:
+          type: string
+          nullable: true
+          description: Manufacturer part description
+          maxLength: 250
+        MPN:
+          type: string
+          nullable: true
+          description: Manufacturer Part Number
+          maxLength: 100
+        link:
+          type: string
+          format: uri
+          nullable: true
+          description: URL for external manufacturer part link
+          maxLength: 2000
+        barcode_hash:
+          type: string
+          description: Unique hash of barcode data
+          maxLength: 128
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        tags:
+          type: array
+          items:
+            type: string
+      required:
+      - manufacturer
+      - part
+      - pk
+    ManufacturerPartParameter:
+      type: object
+      description: Serializer for the ManufacturerPartParameter model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        manufacturer_part:
+          type: integer
+        manufacturer_part_detail:
+          allOf:
+          - $ref: '#/components/schemas/ManufacturerPart'
+          readOnly: true
+          nullable: true
+        name:
+          type: string
+          description: Parameter name
+          maxLength: 500
+        value:
+          type: string
+          description: Parameter value
+          maxLength: 500
+        units:
+          type: string
+          nullable: true
+          description: Parameter units
+          maxLength: 64
+      required:
+      - manufacturer_part
+      - name
+      - pk
+      - value
+    MeUser:
+      type: object
+      description: API serializer specifically for the 'me' endpoint.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        username:
+          type: string
+          description: Username
+        first_name:
+          type: string
+          description: First name of the user
+        last_name:
+          type: string
+          description: Last name of the user
+        email:
+          type: string
+          format: email
+          description: Email address of the user
+        groups:
+          type: array
+          items:
+            $ref: '#/components/schemas/Group'
+          readOnly: true
+        group_ids:
+          type: array
+          items:
+            type: integer
+            writeOnly: true
+          writeOnly: true
+        is_staff:
+          type: boolean
+          title: Staff
+          description: Does this user have staff permissions
+        is_superuser:
+          type: boolean
+          title: Superuser
+          description: Is this user a superuser
+        is_active:
+          type: boolean
+          title: Active
+          description: Is this user account active
+        profile:
+          allOf:
+          - $ref: '#/components/schemas/UserProfile'
+          readOnly: true
+      required:
+      - email
+      - first_name
+      - groups
+      - last_name
+      - pk
+      - profile
+      - username
+    Metadata:
+      type: object
+      description: Serializer class for model metadata API access.
+      properties:
+        metadata: {}
+      required:
+      - metadata
+    NameEnum:
+      enum:
+      - admin
+      - part_category
+      - part
+      - stocktake
+      - stock_location
+      - stock
+      - build
+      - purchase_order
+      - sales_order
+      - return_order
+      type: string
+      description: |-
+        * `admin` - Admin
+        * `part_category` - Part Categories
+        * `part` - Parts
+        * `stocktake` - Stocktake
+        * `stock_location` - Stock Locations
+        * `stock` - Stock Items
+        * `build` - Build Orders
+        * `purchase_order` - Purchase Orders
+        * `sales_order` - Sales Orders
+        * `return_order` - Return Orders
+    NewsFeedEntry:
+      type: object
+      description: Serializer for the NewsFeedEntry model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        feed_id:
+          type: string
+          title: Id
+          maxLength: 250
+        title:
+          type: string
+          maxLength: 250
+        link:
+          type: string
+          format: uri
+          maxLength: 250
+        published:
+          type: string
+          format: date-time
+        author:
+          type: string
+          maxLength: 250
+        summary:
+          type: string
+          maxLength: 250
+        read:
+          type: boolean
+      required:
+      - author
+      - feed_id
+      - link
+      - pk
+      - published
+      - read
+      - summary
+      - title
+    NotesImage:
+      type: object
+      description: Serializer for the NotesImage model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        image:
+          type: string
+          format: uri
+        user:
+          type: integer
+          readOnly: true
+          nullable: true
+        date:
+          type: string
+          format: date-time
+          readOnly: true
+        model_type:
+          type: string
+          nullable: true
+          description: Target model type for this image
+          maxLength: 100
+        model_id:
+          type: integer
+          nullable: true
+          description: Target model ID for this image
+      required:
+      - date
+      - image
+      - pk
+    NotificationMessage:
+      type: object
+      description: Serializer for the InvenTreeUserSetting model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        target:
+          type: object
+          additionalProperties: {}
+          description: Function to resolve generic object reference to target.
+          readOnly: true
+        source:
+          type: object
+          additionalProperties: {}
+          description: Function to resolve generic object reference to source.
+          readOnly: true
+        user:
+          type: integer
+          readOnly: true
+        category:
+          type: string
+          readOnly: true
+        name:
+          type: string
+          readOnly: true
+        message:
+          type: string
+          readOnly: true
+          nullable: true
+        creation:
+          type: string
+          format: date-time
+          readOnly: true
+        age:
+          type: integer
+          description: Age of the message in seconds.
+          readOnly: true
+        age_human:
+          type: string
+          description: Humanized age.
+          readOnly: true
+        read:
+          type: boolean
+      required:
+      - age
+      - age_human
+      - category
+      - creation
+      - name
+      - pk
+      - read
+      - source
+      - target
+      - user
+    NotificationUserSetting:
+      type: object
+      description: Serializer for the PluginSetting model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          readOnly: true
+        value:
+          type: string
+          nullable: true
+        name:
+          type: string
+          readOnly: true
+        description:
+          type: string
+          readOnly: true
+        type:
+          type: string
+          readOnly: true
+        choices:
+          type: array
+          items: {}
+          description: Returns the choices available for a given item.
+          readOnly: true
+        model_name:
+          type: string
+          readOnly: true
+          nullable: true
+        model_filters:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        api_url:
+          type: string
+          readOnly: true
+          nullable: true
+        typ:
+          type: string
+          readOnly: true
+        required:
+          type: boolean
+          readOnly: true
+        method:
+          type: string
+          readOnly: true
+      required:
+      - choices
+      - description
+      - key
+      - method
+      - model_filters
+      - name
+      - pk
+      - required
+      - typ
+      - type
+      - value
+    OutcomeEnum:
+      enum:
+      - 10
+      - 20
+      - 30
+      - 40
+      - 50
+      - 60
+      type: integer
+      description: |-
+        * `10` - Pending
+        * `20` - Return
+        * `30` - Repair
+        * `40` - Replace
+        * `50` - Refund
+        * `60` - Reject
+    Owner:
+      type: object
+      description: Serializer for an "Owner" (either a "user" or a "group").
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        owner_id:
+          type: integer
+          nullable: true
+        owner_model:
+          type: string
+          readOnly: true
+        name:
+          type: string
+          readOnly: true
+        label:
+          type: string
+          readOnly: true
+      required:
+      - label
+      - name
+      - owner_model
+      - pk
+    PageSizeEnum:
+      enum:
+      - A4
+      - A3
+      - Legal
+      - Letter
+      type: string
+      description: |-
+        * `A4` - A4
+        * `A3` - A3
+        * `Legal` - Legal
+        * `Letter` - Letter
+    PaginatedAddressList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Address'
+    PaginatedApiTokenList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ApiToken'
+    PaginatedAttachmentList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Attachment'
+    PaginatedBarcodeScanResultList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/BarcodeScanResult'
+    PaginatedBomItemList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/BomItem'
+    PaginatedBomItemSubstituteList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/BomItemSubstitute'
+    PaginatedBuildItemList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/BuildItem'
+    PaginatedBuildLineList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/BuildLine'
+    PaginatedBuildList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Build'
+    PaginatedCategoryList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Category'
+    PaginatedCategoryParameterTemplateList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/CategoryParameterTemplate'
+    PaginatedCategoryTreeList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/CategoryTree'
+    PaginatedCompanyList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Company'
+    PaginatedContactList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Contact'
+    PaginatedContentTypeList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ContentType'
+    PaginatedCustomStateList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/CustomState'
+    PaginatedCustomUnitList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/CustomUnit'
+    PaginatedDataImportColumnMapList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/DataImportColumnMap'
+    PaginatedDataImportRowList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/DataImportRow'
+    PaginatedDataImportSessionList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/DataImportSession'
+    PaginatedDataOutputList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/DataOutput'
+    PaginatedErrorMessageList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ErrorMessage'
+    PaginatedFailedTaskList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/FailedTask'
+    PaginatedGlobalSettingsList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/GlobalSettings'
+    PaginatedGroupList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Group'
+    PaginatedIconPackageList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/IconPackage'
+    PaginatedLabelTemplateList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/LabelTemplate'
+    PaginatedLocationList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Location'
+    PaginatedLocationTreeList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/LocationTree'
+    PaginatedMachineConfigList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/MachineConfig'
+    PaginatedManufacturerPartList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManufacturerPart'
+    PaginatedManufacturerPartParameterList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManufacturerPartParameter'
+    PaginatedNewsFeedEntryList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/NewsFeedEntry'
+    PaginatedNotesImageList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/NotesImage'
+    PaginatedNotificationMessageList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/NotificationMessage'
+    PaginatedNotificationUserSettingList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/NotificationUserSetting'
+    PaginatedOwnerList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Owner'
+    PaginatedPartInternalPriceList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PartInternalPrice'
+    PaginatedPartList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Part'
+    PaginatedPartParameterList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PartParameter'
+    PaginatedPartParameterTemplateList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PartParameterTemplate'
+    PaginatedPartRelationList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PartRelation'
+    PaginatedPartSalePriceList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PartSalePrice'
+    PaginatedPartStocktakeList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PartStocktake'
+    PaginatedPartStocktakeReportList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PartStocktakeReport'
+    PaginatedPartTestTemplateList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PartTestTemplate'
+    PaginatedPartThumbList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PartThumb'
+    PaginatedPendingTaskList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PendingTask'
+    PaginatedPluginConfigList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PluginConfig'
+    PaginatedPluginSettingList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PluginSetting'
+    PaginatedProjectCodeList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ProjectCode'
+    PaginatedPurchaseOrderExtraLineList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PurchaseOrderExtraLine'
+    PaginatedPurchaseOrderLineItemList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PurchaseOrderLineItem'
+    PaginatedPurchaseOrderList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/PurchaseOrder'
+    PaginatedReportAssetList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ReportAsset'
+    PaginatedReportSnippetList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ReportSnippet'
+    PaginatedReportTemplateList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ReportTemplate'
+    PaginatedReturnOrderExtraLineList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ReturnOrderExtraLine'
+    PaginatedReturnOrderLineItemList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ReturnOrderLineItem'
+    PaginatedReturnOrderList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ReturnOrder'
+    PaginatedRuleSetList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/RuleSet'
+    PaginatedSalesOrderAllocationList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/SalesOrderAllocation'
+    PaginatedSalesOrderExtraLineList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/SalesOrderExtraLine'
+    PaginatedSalesOrderLineItemList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/SalesOrderLineItem'
+    PaginatedSalesOrderList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/SalesOrder'
+    PaginatedSalesOrderShipmentList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/SalesOrderShipment'
+    PaginatedScheduledTaskList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ScheduledTask'
+    PaginatedSelectionEntryList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/SelectionEntry'
+    PaginatedSelectionListList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/SelectionList'
+    PaginatedStockItemList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/StockItem'
+    PaginatedStockItemTestResultList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/StockItemTestResult'
+    PaginatedStockLocationTypeList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/StockLocationType'
+    PaginatedStockTrackingList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/StockTracking'
+    PaginatedSupplierPartList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/SupplierPart'
+    PaginatedSupplierPriceBreakList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/SupplierPriceBreak'
+    PaginatedUserCreateList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/UserCreate'
+    PaginatedUserSettingsList:
+      type: object
+      required:
+      - count
+      - results
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=400&limit=100
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?offset=200&limit=100
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/UserSettings'
+    Part:
+      type: object
+      description: |-
+        Serializer for complete detail information of a part.
+
+        Used when displaying all details of a single component.
+      properties:
+        active:
+          type: boolean
+          description: Is this part active?
+        assembly:
+          type: boolean
+          description: Can this part be built from other parts?
+        barcode_hash:
+          type: string
+          readOnly: true
+          description: Unique hash of barcode data
+        category:
+          type: integer
+          nullable: true
+        category_detail:
+          allOf:
+          - $ref: '#/components/schemas/Category'
+          readOnly: true
+          nullable: true
+        category_path:
+          type: array
+          items:
+            type: object
+            additionalProperties: {}
+          readOnly: true
+          nullable: true
+        category_name:
+          type: string
+          readOnly: true
+        component:
+          type: boolean
+          description: Can this part be used to build other parts?
+        creation_date:
+          type: string
+          format: date
+          readOnly: true
+          nullable: true
+        creation_user:
+          type: integer
+          nullable: true
+        default_expiry:
+          type: integer
+          minimum: 0
+          description: Expiry time (in days) for stock items of this part
+        default_location:
+          type: integer
+          nullable: true
+          description: Where is this item normally stored?
+        default_location_detail:
+          allOf:
+          - $ref: '#/components/schemas/DefaultLocation'
+          readOnly: true
+          nullable: true
+        default_supplier:
+          type: integer
+          nullable: true
+          description: Default supplier part
+        description:
+          type: string
+          description: Part description (optional)
+          maxLength: 250
+        full_name:
+          type: string
+          description: Format a 'full name' for this Part based on the format PART_NAME_FORMAT
+            defined in InvenTree settings.
+          readOnly: true
+        image:
+          type: string
+          format: uri
+          nullable: true
+        remote_image:
+          type: string
+          format: uri
+          writeOnly: true
+          description: URL of remote image file
+        existing_image:
+          type: string
+          writeOnly: true
+          description: Filename of an existing part image
+        IPN:
+          type: string
+          default: ''
+          maxLength: 100
+        is_template:
+          type: boolean
+          description: Is this part a template part?
+        keywords:
+          type: string
+          nullable: true
+          description: Part keywords to improve visibility in search results
+          maxLength: 250
+        last_stocktake:
+          type: string
+          format: date
+          nullable: true
+        link:
+          type: string
+          format: uri
+          nullable: true
+          description: Link to external URL
+          maxLength: 2000
+        locked:
+          type: boolean
+          description: Locked parts cannot be edited
+        minimum_stock:
+          type: number
+          format: double
+          default: 0.0
+        name:
+          type: string
+          description: Part name
+          maxLength: 100
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        parameters:
+          type: array
+          items:
+            $ref: '#/components/schemas/PartParameter'
+          readOnly: true
+          nullable: true
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        purchaseable:
+          type: boolean
+          description: Can this part be purchased from external suppliers?
+        revision:
+          type: string
+          nullable: true
+          default: ''
+          maxLength: 100
+        revision_of:
+          type: integer
+          nullable: true
+          description: Is this part a revision of another part?
+        revision_count:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Revisions
+        salable:
+          type: boolean
+          description: Can this part be sold to customers?
+        starred:
+          type: boolean
+          description: Return "true" if the part is starred by the current user.
+          readOnly: true
+        thumbnail:
+          type: string
+          readOnly: true
+        testable:
+          type: boolean
+          description: Can this part have test results recorded against it?
+        trackable:
+          type: boolean
+          description: Does this part have tracking for unique items?
+        units:
+          type: string
+          nullable: true
+          description: Units of measure for this part
+          maxLength: 20
+        variant_of:
+          type: integer
+          nullable: true
+          description: Is this part a variant of another part?
+        virtual:
+          type: boolean
+          description: Is this a virtual part, such as a software product or license?
+        pricing_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        pricing_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        pricing_updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        responsible:
+          type: integer
+          nullable: true
+        allocated_to_build_orders:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        allocated_to_sales_orders:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        building:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        category_default_location:
+          type: integer
+          readOnly: true
+          nullable: true
+        in_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        ordering:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+          title: On Order
+        required_for_build_orders:
+          type: integer
+          readOnly: true
+          nullable: true
+        required_for_sales_orders:
+          type: integer
+          readOnly: true
+          nullable: true
+        stock_item_count:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Stock Items
+        suppliers:
+          type: integer
+          readOnly: true
+          nullable: true
+        total_in_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+          title: Total Stock
+        external_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        unallocated_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        variant_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        duplicate:
+          allOf:
+          - $ref: '#/components/schemas/DuplicatePart'
+          writeOnly: true
+          title: Duplicate Part
+          description: Copy initial data from another Part
+        initial_stock:
+          allOf:
+          - $ref: '#/components/schemas/InitialStock'
+          writeOnly: true
+          description: Create Part with initial stock quantity
+        initial_supplier:
+          allOf:
+          - $ref: '#/components/schemas/InitialSupplier'
+          writeOnly: true
+          title: Supplier Information
+          description: Add initial supplier information for this part
+        copy_category_parameters:
+          type: boolean
+          default: true
+          description: Copy parameter templates from selected part category
+        tags:
+          type: array
+          items:
+            type: string
+      required:
+      - barcode_hash
+      - category_name
+      - full_name
+      - name
+      - pk
+      - starred
+      - thumbnail
+    PartBrief:
+      type: object
+      description: Serializer for Part (brief detail).
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        IPN:
+          type: string
+          nullable: true
+          description: Internal Part Number
+          maxLength: 100
+        barcode_hash:
+          type: string
+          readOnly: true
+          description: Unique hash of barcode data
+        category_default_location:
+          type: integer
+          readOnly: true
+          nullable: true
+        default_location:
+          type: integer
+          nullable: true
+          description: Where is this item normally stored?
+        default_expiry:
+          type: integer
+          minimum: 0
+          description: Expiry time (in days) for stock items of this part
+        name:
+          type: string
+          description: Part name
+          maxLength: 100
+        revision:
+          type: string
+          nullable: true
+          default: ''
+          maxLength: 100
+        full_name:
+          type: string
+          description: Format a 'full name' for this Part based on the format PART_NAME_FORMAT
+            defined in InvenTree settings.
+          readOnly: true
+        description:
+          type: string
+          description: Part description (optional)
+          maxLength: 250
+        image:
+          type: string
+          format: uri
+          readOnly: true
+          nullable: true
+        thumbnail:
+          type: string
+          readOnly: true
+        active:
+          type: boolean
+          description: Is this part active?
+        locked:
+          type: boolean
+          description: Locked parts cannot be edited
+        assembly:
+          type: boolean
+          description: Can this part be built from other parts?
+        component:
+          type: boolean
+          description: Can this part be used to build other parts?
+        is_template:
+          type: boolean
+          description: Is this part a template part?
+        purchaseable:
+          type: boolean
+          description: Can this part be purchased from external suppliers?
+        salable:
+          type: boolean
+          description: Can this part be sold to customers?
+        testable:
+          type: boolean
+          description: Can this part have test results recorded against it?
+        trackable:
+          type: boolean
+          description: Does this part have tracking for unique items?
+        virtual:
+          type: boolean
+          description: Is this a virtual part, such as a software product or license?
+        units:
+          type: string
+          nullable: true
+          description: Units of measure for this part
+          maxLength: 20
+        pricing_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        pricing_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+      required:
+      - barcode_hash
+      - full_name
+      - name
+      - pk
+      - thumbnail
+    PartCopyBOM:
+      type: object
+      description: Serializer for copying a BOM from another part.
+      properties:
+        part:
+          type: integer
+          description: Select part to copy BOM from
+        remove_existing:
+          type: boolean
+          default: true
+          title: Remove Existing Data
+          description: Remove existing BOM items before copying
+        include_inherited:
+          type: boolean
+          default: false
+          description: Include BOM items which are inherited from templated parts
+        skip_invalid:
+          type: boolean
+          default: false
+          title: Skip Invalid Rows
+          description: Enable this option to skip invalid rows
+        copy_substitutes:
+          type: boolean
+          default: true
+          title: Copy Substitute Parts
+          description: Copy substitute parts when duplicate BOM items
+      required:
+      - part
+    PartInternalPrice:
+      type: object
+      description: Serializer for internal prices for Part model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+        quantity:
+          type: number
+          format: double
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Purchase currency of this stock item
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+      required:
+      - part
+      - pk
+      - quantity
+    PartParameter:
+      type: object
+      description: JSON serializers for the PartParameter model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+          description: Parent Part
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+        template:
+          type: integer
+          description: Parameter Template
+        template_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartParameterTemplate'
+          readOnly: true
+          nullable: true
+        data:
+          type: string
+          description: Parameter Value
+          maxLength: 500
+          minLength: 1
+        data_numeric:
+          type: number
+          format: double
+          nullable: true
+      required:
+      - data
+      - part
+      - pk
+      - template
+    PartParameterTemplate:
+      type: object
+      description: JSON serializer for the PartParameterTemplate model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Parameter Name
+          maxLength: 100
+        units:
+          type: string
+          description: Physical units for this parameter
+          maxLength: 25
+        description:
+          type: string
+          description: Parameter description
+          maxLength: 250
+        parts:
+          type: integer
+          readOnly: true
+          nullable: true
+          description: Number of parts using this template
+        checkbox:
+          type: boolean
+          description: Is this parameter a checkbox?
+        choices:
+          type: string
+          description: Valid choices for this parameter (comma-separated)
+          maxLength: 5000
+        selectionlist:
+          type: integer
+          nullable: true
+          title: Selection List
+          description: Selection list for this parameter
+      required:
+      - name
+      - pk
+    PartPricing:
+      type: object
+      description: Serializer for Part pricing information.
+      properties:
+        currency:
+          type: string
+          readOnly: true
+          nullable: true
+        updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        scheduled_for_update:
+          type: boolean
+          readOnly: true
+        bom_cost_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        bom_cost_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        purchase_cost_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        purchase_cost_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        internal_cost_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        internal_cost_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        supplier_price_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        supplier_price_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        variant_cost_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        variant_cost_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        override_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+          title: Minimum Price
+          description: Override calculated value for minimum price
+        override_min_currency:
+          type: string
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+          title: Minimum price currency
+        override_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+          title: Maximum Price
+          description: Override calculated value for maximum price
+        override_max_currency:
+          type: string
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+          title: Maximum price currency
+        overall_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        overall_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        sale_price_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        sale_price_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        sale_history_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        sale_history_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        update:
+          type: boolean
+          writeOnly: true
+          nullable: true
+          default: false
+          description: Update pricing for this part
+      required:
+      - scheduled_for_update
+    PartRelation:
+      type: object
+      description: Serializer for a PartRelated model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part_1:
+          type: integer
+        part_1_detail:
+          allOf:
+          - $ref: '#/components/schemas/Part'
+          readOnly: true
+        part_2:
+          type: integer
+          description: Select Related Part
+        part_2_detail:
+          allOf:
+          - $ref: '#/components/schemas/Part'
+          readOnly: true
+        note:
+          type: string
+          description: Note for this relationship
+          maxLength: 500
+      required:
+      - part_1
+      - part_1_detail
+      - part_2
+      - part_2_detail
+      - pk
+    PartSalePrice:
+      type: object
+      description: Serializer for sale prices for Part model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+        quantity:
+          type: number
+          format: double
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Purchase currency of this stock item
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+      required:
+      - part
+      - pk
+      - quantity
+    PartScheduling:
+      type: object
+      description: Serializer class for a PartScheduling entry.
+      properties:
+        date:
+          type: string
+          format: date
+          nullable: true
+        quantity:
+          type: number
+          format: double
+        speculative_quantity:
+          type: number
+          format: double
+        title:
+          type: string
+        label:
+          type: string
+        model:
+          type: string
+        model_id:
+          type: integer
+      required:
+      - date
+      - label
+      - model
+      - model_id
+      - quantity
+      - title
+    PartStocktake:
+      type: object
+      description: Serializer for the PartStocktake model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        date:
+          type: string
+          format: date
+          readOnly: true
+          description: Date stocktake was performed
+        part:
+          type: integer
+          description: Part for stocktake
+        item_count:
+          type: integer
+          description: Number of individual stock entries at time of stocktake
+        quantity:
+          type: number
+          format: double
+        cost_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        cost_min_currency:
+          type: string
+          title: Currency
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        cost_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        cost_max_currency:
+          type: string
+          title: Currency
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        note:
+          type: string
+          title: Notes
+          description: Additional notes
+          maxLength: 250
+        user:
+          type: integer
+          readOnly: true
+          nullable: true
+          description: User who performed this stocktake
+        user_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+      required:
+      - date
+      - part
+      - pk
+      - quantity
+      - user_detail
+    PartStocktakeReport:
+      type: object
+      description: Serializer for stocktake report class.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        date:
+          type: string
+          format: date
+          readOnly: true
+        report:
+          type: string
+          format: uri
+          readOnly: true
+        part_count:
+          type: integer
+          readOnly: true
+          description: Number of parts covered by stocktake
+        user:
+          type: integer
+          readOnly: true
+          nullable: true
+          description: User who requested this stocktake report
+        user_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+      required:
+      - date
+      - part_count
+      - pk
+      - report
+      - user_detail
+    PartStocktakeReportGenerate:
+      type: object
+      description: Serializer class for manually generating a new PartStocktakeReport
+        via the API.
+      properties:
+        part:
+          type: integer
+          nullable: true
+          description: Limit stocktake report to a particular part, and any variant
+            parts
+        category:
+          type: integer
+          nullable: true
+          description: Limit stocktake report to a particular part category, and any
+            child categories
+        location:
+          type: integer
+          nullable: true
+          description: Limit stocktake report to a particular stock location, and
+            any child locations
+        exclude_external:
+          type: boolean
+          default: true
+          title: Exclude External Stock
+          description: Exclude stock items in external locations
+        generate_report:
+          type: boolean
+          default: true
+          description: Generate report file containing calculated stocktake data
+        update_parts:
+          type: boolean
+          default: true
+          description: Update specified parts with calculated stocktake data
+    PartTestTemplate:
+      type: object
+      description: Serializer for the PartTestTemplate class.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          readOnly: true
+        part:
+          type: integer
+        test_name:
+          type: string
+          description: Enter a name for the test
+          maxLength: 100
+        description:
+          type: string
+          nullable: true
+          title: Test Description
+          description: Enter description for this test
+          maxLength: 100
+        enabled:
+          type: boolean
+          description: Is this test enabled?
+        required:
+          type: boolean
+          description: Is this test required to pass?
+        requires_value:
+          type: boolean
+          description: Does this test require a value when adding a test result?
+        requires_attachment:
+          type: boolean
+          description: Does this test require a file attachment when adding a test
+            result?
+        results:
+          type: integer
+          readOnly: true
+          description: Number of results recorded against this template
+        choices:
+          type: string
+          description: Valid choices for this test (comma-separated)
+          maxLength: 5000
+      required:
+      - key
+      - part
+      - pk
+      - results
+      - test_name
+    PartThumb:
+      type: object
+      description: |-
+        Serializer for the 'image' field of the Part model.
+
+        Used to serve and display existing Part images.
+      properties:
+        image:
+          type: string
+          format: uri
+          readOnly: true
+        count:
+          type: integer
+          readOnly: true
+      required:
+      - count
+      - image
+    PartThumbSerializerUpdate:
+      type: object
+      description: Serializer for updating Part thumbnail.
+      properties:
+        image:
+          type: string
+          format: uri
+      required:
+      - image
+    PatchedAddress:
+      type: object
+      description: Serializer for the Address Model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        company:
+          type: integer
+          description: Select company
+        title:
+          type: string
+          title: Address title
+          description: Title describing the address entry
+          maxLength: 100
+        primary:
+          type: boolean
+          title: Primary address
+          description: Set as primary address
+        line1:
+          type: string
+          title: Line 1
+          description: Address line 1
+          maxLength: 50
+        line2:
+          type: string
+          title: Line 2
+          description: Address line 2
+          maxLength: 50
+        postal_code:
+          type: string
+          description: Postal code
+          maxLength: 10
+        postal_city:
+          type: string
+          title: City/Region
+          description: Postal code city/region
+          maxLength: 50
+        province:
+          type: string
+          title: State/Province
+          description: State or province
+          maxLength: 50
+        country:
+          type: string
+          description: Address country
+          maxLength: 50
+        shipping_notes:
+          type: string
+          title: Courier shipping notes
+          description: Notes for shipping courier
+          maxLength: 100
+        internal_shipping_notes:
+          type: string
+          description: Shipping notes for internal use
+          maxLength: 100
+        link:
+          type: string
+          format: uri
+          description: Link to address information (external)
+          maxLength: 2000
+    PatchedAttachment:
+      type: object
+      description: Serializer class for the Attachment model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        attachment:
+          type: string
+          format: uri
+          nullable: true
+        filename:
+          type: string
+        link:
+          type: string
+          format: uri
+          nullable: true
+          description: Link to external URL
+          maxLength: 2000
+        comment:
+          type: string
+          description: Attachment comment
+          maxLength: 250
+        upload_date:
+          type: string
+          format: date
+          readOnly: true
+        upload_user:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: User
+          description: User
+        user_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+        file_size:
+          type: integer
+          readOnly: true
+          description: File size in bytes
+        model_type:
+          $ref: '#/components/schemas/AttachmentModelTypeEnum'
+        model_id:
+          type: integer
+        tags:
+          type: array
+          items:
+            type: string
+    PatchedBOMValidate:
+      type: object
+      description: Simple serializer class for validating a single BomItem instance.
+      properties:
+        checksum:
+          type: string
+          readOnly: true
+        valid:
+          type: boolean
+          writeOnly: true
+          default: false
+          description: Validate entire Bill of Materials
+    PatchedBomItem:
+      type: object
+      description: Serializer for BomItem object.
+      properties:
+        part:
+          type: integer
+          title: Assembly
+          description: Select the parent assembly
+        sub_part:
+          type: integer
+          title: Component
+          description: Select the component part
+        reference:
+          type: string
+          description: BOM item reference
+          maxLength: 5000
+        quantity:
+          type: number
+          format: double
+        overage:
+          type: string
+          description: Estimated build wastage quantity (absolute or percentage)
+          maxLength: 24
+        allow_variants:
+          type: boolean
+          description: Stock items for variant parts can be used for this BOM item
+        inherited:
+          type: boolean
+          title: Gets inherited
+          description: This BOM item is inherited by BOMs for variant parts
+        optional:
+          type: boolean
+          description: This BOM item is optional
+        consumable:
+          type: boolean
+          description: This BOM item is consumable (it is not tracked in build orders)
+        note:
+          type: string
+          description: BOM item notes
+          maxLength: 500
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+          title: Assembly
+        pricing_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        pricing_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        pricing_min_total:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        pricing_max_total:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        pricing_updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        sub_part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+          title: Component
+        substitutes:
+          type: array
+          items:
+            $ref: '#/components/schemas/BomItemSubstitute'
+          readOnly: true
+          nullable: true
+        validated:
+          type: boolean
+          description: This BOM item has been validated
+        available_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        available_substitute_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        available_variant_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        external_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        on_order:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        building:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+          title: In Production
+        can_build:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+    PatchedBomItemSubstitute:
+      type: object
+      description: Serializer for the BomItemSubstitute class.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        bom_item:
+          type: integer
+          description: Parent BOM item
+        part:
+          type: integer
+          description: Substitute part
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+    PatchedBomItemValidation:
+      type: object
+      description: Simple serializer for passing a single boolean field.
+      properties:
+        valid:
+          type: boolean
+          default: false
+    PatchedBuild:
+      type: object
+      description: Serializes a Build object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        title:
+          type: string
+          title: Description
+          description: Brief description of the build (optional)
+          maxLength: 100
+        barcode_hash:
+          type: string
+          readOnly: true
+        batch:
+          type: string
+          nullable: true
+          title: Batch Code
+          description: Batch code for this build output
+          maxLength: 100
+        creation_date:
+          type: string
+          format: date
+          readOnly: true
+        completed:
+          type: integer
+          readOnly: true
+          title: Completed items
+          description: Number of stock items which have been completed
+        completion_date:
+          type: string
+          format: date
+          nullable: true
+        destination:
+          type: integer
+          nullable: true
+          title: Destination Location
+          description: Select location where the completed items will be stored
+        parent:
+          type: integer
+          nullable: true
+          title: Parent Build
+          description: BuildOrder to which this build is allocated
+        part:
+          type: integer
+          description: Select part to build
+        part_name:
+          type: string
+          readOnly: true
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+        project_code:
+          type: integer
+          nullable: true
+          description: Project code for this build order
+        project_code_label:
+          type: string
+          readOnly: true
+          nullable: true
+        project_code_detail:
+          allOf:
+          - $ref: '#/components/schemas/ProjectCode'
+          readOnly: true
+          nullable: true
+        overdue:
+          type: boolean
+          readOnly: true
+          default: false
+        reference:
+          type: string
+        sales_order:
+          type: integer
+          nullable: true
+          title: Sales Order Reference
+          description: SalesOrder to which this build is allocated
+        quantity:
+          type: number
+          format: double
+        start_date:
+          type: string
+          format: date
+          nullable: true
+          title: Build start date
+          description: Scheduled start date for this build order
+        status:
+          allOf:
+          - $ref: '#/components/schemas/BuildStatusEnum'
+          readOnly: true
+          title: Build Status
+          description: |-
+            Build status code
+
+            * `10` - Pending
+            * `20` - Production
+            * `25` - On Hold
+            * `30` - Cancelled
+            * `40` - Complete
+        status_text:
+          type: string
+          readOnly: true
+        status_custom_key:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Custom status key
+          description: |-
+            Additional status information for this item
+
+            * `10` - Pending
+            * `20` - Production
+            * `25` - On Hold
+            * `30` - Cancelled
+            * `40` - Complete
+
+            Additional custom status keys may be retrieved from the corresponding 'status_retrieve' call.
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          title: Target completion date
+          description: Target date for build completion. Build will be overdue after
+            this date.
+        take_from:
+          type: integer
+          nullable: true
+          title: Source Location
+          description: Select location to take stock from for this build (leave blank
+            to take from any stock location)
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        link:
+          type: string
+          format: uri
+          title: External Link
+          description: Link to external URL
+          maxLength: 2000
+        issued_by:
+          type: integer
+          nullable: true
+          description: User who issued this build order
+        issued_by_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+        responsible:
+          type: integer
+          nullable: true
+          description: User or group responsible for this build order
+        responsible_detail:
+          allOf:
+          - $ref: '#/components/schemas/Owner'
+          readOnly: true
+          nullable: true
+        priority:
+          type: integer
+          minimum: 0
+          title: Build Priority
+          description: Priority of this build order
+        level:
+          type: integer
+          readOnly: true
+          title: Build Level
+        create_child_builds:
+          type: boolean
+          writeOnly: true
+          default: false
+          description: Automatically generate child build orders
+    PatchedBuildItem:
+      type: object
+      description: Serializes a BuildItem object, which is an allocation of a stock
+        item against a build order.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        build:
+          type: integer
+          readOnly: true
+        build_line:
+          type: integer
+          nullable: true
+        install_into:
+          type: integer
+          nullable: true
+          description: Destination stock item
+        stock_item:
+          type: integer
+          description: Source stock item
+        quantity:
+          type: number
+          format: double
+          title: Allocated Quantity
+        location:
+          type: integer
+          readOnly: true
+        build_detail:
+          allOf:
+          - $ref: '#/components/schemas/Build'
+          readOnly: true
+          nullable: true
+          title: Build
+        location_detail:
+          allOf:
+          - $ref: '#/components/schemas/LocationBrief'
+          readOnly: true
+          nullable: true
+          title: Location
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+          title: Part
+        stock_item_detail:
+          allOf:
+          - $ref: '#/components/schemas/StockItemSerializerBrief'
+          readOnly: true
+          nullable: true
+          title: Stock Item
+        supplier_part_detail:
+          allOf:
+          - $ref: '#/components/schemas/SupplierPart'
+          readOnly: true
+          nullable: true
+          title: Supplier Part
+        bom_reference:
+          type: string
+          readOnly: true
+    PatchedBuildLine:
+      type: object
+      description: Serializer for a BuildItem object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        build:
+          type: integer
+          readOnly: true
+          description: Build object
+        bom_item:
+          type: integer
+          readOnly: true
+        quantity:
+          type: number
+          format: double
+        part:
+          type: integer
+          readOnly: true
+        build_reference:
+          type: string
+          readOnly: true
+        reference:
+          type: string
+          readOnly: true
+        consumable:
+          type: boolean
+          readOnly: true
+        optional:
+          type: boolean
+          readOnly: true
+        testable:
+          type: boolean
+          readOnly: true
+        trackable:
+          type: boolean
+          readOnly: true
+        inherited:
+          type: boolean
+          readOnly: true
+        allow_variants:
+          type: boolean
+          readOnly: true
+        allocated:
+          type: number
+          format: double
+          readOnly: true
+          title: Allocated Stock
+        in_production:
+          type: number
+          format: double
+          readOnly: true
+        on_order:
+          type: number
+          format: double
+          readOnly: true
+        available_stock:
+          type: number
+          format: double
+          readOnly: true
+        available_substitute_stock:
+          type: number
+          format: double
+          readOnly: true
+        available_variant_stock:
+          type: number
+          format: double
+          readOnly: true
+        external_stock:
+          type: number
+          format: double
+          readOnly: true
+        allocations:
+          type: array
+          items:
+            $ref: '#/components/schemas/BuildItem'
+          readOnly: true
+        bom_item_detail:
+          allOf:
+          - $ref: '#/components/schemas/BomItem'
+          readOnly: true
+          title: BOM Item
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          title: Part
+        build_detail:
+          allOf:
+          - $ref: '#/components/schemas/Build'
+          readOnly: true
+          nullable: true
+          title: Build
+    PatchedCategory:
+      type: object
+      description: Serializer for PartCategory.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Name
+          maxLength: 100
+        description:
+          type: string
+          description: Description (optional)
+          maxLength: 250
+        default_location:
+          type: integer
+          nullable: true
+          description: Default location for parts in this category
+        default_keywords:
+          type: string
+          nullable: true
+          description: Default keywords for parts in this category
+          maxLength: 250
+        level:
+          type: integer
+          readOnly: true
+        parent:
+          type: integer
+          nullable: true
+          title: Parent Category
+          description: Parent part category
+        part_count:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Parts
+        subcategories:
+          type: integer
+          readOnly: true
+          nullable: true
+        pathstring:
+          type: string
+          readOnly: true
+          title: Path
+          description: Path
+        path:
+          type: array
+          items:
+            type: object
+            additionalProperties: {}
+          readOnly: true
+          nullable: true
+        starred:
+          type: boolean
+          description: Return True if the category is directly "starred" by the current
+            user.
+          readOnly: true
+        structural:
+          type: boolean
+          description: Parts may not be directly assigned to a structural category,
+            but may be assigned to child categories.
+        icon:
+          type: string
+          nullable: true
+          description: Icon (optional)
+          maxLength: 100
+        parent_default_location:
+          type: integer
+          readOnly: true
+          nullable: true
+    PatchedCategoryParameterTemplate:
+      type: object
+      description: Serializer for the PartCategoryParameterTemplate model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        category:
+          type: integer
+          description: Part Category
+        category_detail:
+          allOf:
+          - $ref: '#/components/schemas/Category'
+          readOnly: true
+          nullable: true
+        parameter_template:
+          type: integer
+          description: Parameter Template
+        parameter_template_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartParameterTemplate'
+          readOnly: true
+        default_value:
+          type: string
+          description: Default Parameter Value
+          maxLength: 500
+    PatchedCompany:
+      type: object
+      description: Serializer for Company object (full detail).
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          title: Company name
+          description: Company name
+          maxLength: 100
+        description:
+          type: string
+          title: Company description
+          description: Description of the company
+          maxLength: 500
+        website:
+          type: string
+          format: uri
+          description: Company website URL
+          maxLength: 2000
+        phone:
+          type: string
+          title: Phone number
+          description: Contact phone number
+          maxLength: 50
+        address:
+          type: string
+          readOnly: true
+          nullable: true
+          title: Return the string representation for the primary address. This property
+            exists for backwards compatibility.
+        email:
+          type: string
+          format: email
+          nullable: true
+          default: ''
+        currency:
+          type: string
+          description: |-
+            Default currency used for this supplier
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        contact:
+          type: string
+          description: Point of contact
+          maxLength: 100
+        link:
+          type: string
+          format: uri
+          description: Link to external company information
+          maxLength: 2000
+        image:
+          type: string
+          format: uri
+          nullable: true
+        active:
+          type: boolean
+          description: Is this company active?
+        is_customer:
+          type: boolean
+          description: Do you sell items to this company?
+        is_manufacturer:
+          type: boolean
+          description: Does this company manufacture parts?
+        is_supplier:
+          type: boolean
+          description: Do you purchase items from this company?
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        parts_supplied:
+          type: integer
+          readOnly: true
+        parts_manufactured:
+          type: integer
+          readOnly: true
+        remote_image:
+          type: string
+          format: uri
+          writeOnly: true
+          description: URL of remote image file
+        address_count:
+          type: integer
+          readOnly: true
+        primary_address:
+          allOf:
+          - $ref: '#/components/schemas/Address'
+          readOnly: true
+          nullable: true
+    PatchedContact:
+      type: object
+      description: Serializer class for the Contact model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        company:
+          type: integer
+        company_name:
+          type: string
+          readOnly: true
+        name:
+          type: string
+          maxLength: 100
+        phone:
+          type: string
+          maxLength: 100
+        email:
+          type: string
+          format: email
+          maxLength: 254
+        role:
+          type: string
+          maxLength: 100
+    PatchedCustomState:
+      type: object
+      description: Serializer for the custom state model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: integer
+          title: Value
+          description: Numerical value that will be saved in the models database
+        name:
+          type: string
+          description: Name of the state
+          maxLength: 250
+        label:
+          type: string
+          description: Label that will be displayed in the frontend
+          maxLength: 250
+        color:
+          allOf:
+          - $ref: '#/components/schemas/ColorEnum'
+          description: |-
+            Color that will be displayed in the frontend
+
+            * `primary` - primary
+            * `secondary` - secondary
+            * `success` - success
+            * `danger` - danger
+            * `warning` - warning
+            * `info` - info
+            * `dark` - dark
+        logical_key:
+          type: integer
+          description: State logical key that is equal to this custom state in business
+            logic
+        model:
+          type: integer
+          nullable: true
+          description: Model this state is associated with
+        model_name:
+          type: string
+          readOnly: true
+        reference_status:
+          $ref: '#/components/schemas/ReferenceStatusEnum'
+    PatchedCustomUnit:
+      type: object
+      description: DRF serializer for CustomUnit model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Unit name
+          maxLength: 50
+        symbol:
+          type: string
+          description: Optional unit symbol
+          maxLength: 10
+        definition:
+          type: string
+          description: Unit definition
+          maxLength: 50
+    PatchedDataImportColumnMap:
+      type: object
+      description: Serializer for the DataImportColumnMap model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        session:
+          type: integer
+          readOnly: true
+          title: Import Session
+        column:
+          type: string
+          maxLength: 100
+        field:
+          type: string
+          readOnly: true
+        label:
+          type: string
+          readOnly: true
+        description:
+          type: string
+          readOnly: true
+    PatchedDataImportRow:
+      type: object
+      description: Serializer for the DataImportRow model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        session:
+          type: integer
+          readOnly: true
+          title: Import Session
+        row_index:
+          type: integer
+          readOnly: true
+        row_data:
+          readOnly: true
+          nullable: true
+          title: Original row data
+        data:
+          nullable: true
+        errors:
+          readOnly: true
+          nullable: true
+        valid:
+          type: boolean
+          readOnly: true
+        complete:
+          type: boolean
+          readOnly: true
+    PatchedDataImportSession:
+      type: object
+      description: Serializer for the DataImportSession model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        timestamp:
+          type: string
+          format: date-time
+          readOnly: true
+        data_file:
+          type: string
+          format: uri
+        model_type:
+          $ref: '#/components/schemas/DataImportSessionModelTypeEnum'
+        available_fields:
+          readOnly: true
+        status:
+          allOf:
+          - $ref: '#/components/schemas/DataImportSessionStatusEnum'
+          readOnly: true
+          description: |-
+            Import status
+
+            * `0` - Initializing
+            * `10` - Mapping Columns
+            * `20` - Importing Data
+            * `30` - Processing Data
+            * `40` - Complete
+        user:
+          type: integer
+          readOnly: true
+          nullable: true
+        user_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+        columns:
+          readOnly: true
+          nullable: true
+        column_mappings:
+          type: array
+          items:
+            $ref: '#/components/schemas/DataImportColumnMap'
+          readOnly: true
+        field_defaults:
+          nullable: true
+        field_overrides:
+          nullable: true
+        field_filters:
+          nullable: true
+        row_count:
+          type: integer
+          readOnly: true
+        completed_row_count:
+          type: integer
+          readOnly: true
+    PatchedErrorMessage:
+      type: object
+      description: DRF serializer for server error messages.
+      properties:
+        when:
+          type: string
+          format: date-time
+          readOnly: true
+        info:
+          type: string
+          readOnly: true
+        data:
+          type: string
+          readOnly: true
+          nullable: true
+        path:
+          type: string
+          format: uri
+          readOnly: true
+          nullable: true
+          maxLength: 200
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+    PatchedExtendedUser:
+      type: object
+      description: Serializer for a User with a bit more info.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        username:
+          type: string
+          description: Username
+        first_name:
+          type: string
+          description: First name of the user
+        last_name:
+          type: string
+          description: Last name of the user
+        email:
+          type: string
+          format: email
+          description: Email address of the user
+        groups:
+          type: array
+          items:
+            $ref: '#/components/schemas/Group'
+          readOnly: true
+        group_ids:
+          type: array
+          items:
+            type: integer
+            writeOnly: true
+          writeOnly: true
+        is_staff:
+          type: boolean
+          title: Staff
+          description: Does this user have staff permissions
+        is_superuser:
+          type: boolean
+          title: Superuser
+          description: Is this user a superuser
+        is_active:
+          type: boolean
+          title: Active
+          description: Is this user account active
+        profile:
+          allOf:
+          - $ref: '#/components/schemas/BriefUserProfile'
+          readOnly: true
+    PatchedGlobalSettings:
+      type: object
+      description: Serializer for the InvenTreeSetting model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          readOnly: true
+        value:
+          type: string
+          nullable: true
+        name:
+          type: string
+          readOnly: true
+        description:
+          type: string
+          readOnly: true
+        type:
+          type: string
+          readOnly: true
+        units:
+          type: string
+          readOnly: true
+        choices:
+          type: array
+          items: {}
+          description: Returns the choices available for a given item.
+          readOnly: true
+        model_name:
+          type: string
+          readOnly: true
+          nullable: true
+        api_url:
+          type: string
+          readOnly: true
+          nullable: true
+        typ:
+          type: string
+          readOnly: true
+    PatchedGroup:
+      type: object
+      description: Serializer for a 'Group'.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          maxLength: 150
+        permissions:
+          type: object
+          additionalProperties: {}
+          description: Return a list of permissions associated with the group.
+          readOnly: true
+          nullable: true
+        roles:
+          type: array
+          items:
+            $ref: '#/components/schemas/RuleSet'
+          readOnly: true
+          nullable: true
+        users:
+          type: array
+          items:
+            $ref: '#/components/schemas/User'
+          readOnly: true
+          nullable: true
+    PatchedLabelTemplate:
+      type: object
+      description: Serializer class for label template model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Template name
+          maxLength: 100
+        description:
+          type: string
+          description: Template description
+          maxLength: 250
+        model_type:
+          $ref: '#/components/schemas/TemplateModelTypeEnum'
+        template:
+          type: string
+          format: uri
+        filters:
+          type: string
+          description: Template query filters (comma-separated list of key=value pairs)
+          maxLength: 250
+        filename_pattern:
+          type: string
+          description: Pattern for generating filenames
+          maxLength: 100
+        enabled:
+          type: boolean
+          description: Template is enabled
+        revision:
+          type: integer
+          readOnly: true
+        attach_to_model:
+          type: boolean
+          title: Attach to Model on Print
+          description: Save report output as an attachment against linked model instance
+            when printing
+        width:
+          type: number
+          format: double
+          minimum: 2
+          title: Width [mm]
+          description: Label width, specified in mm
+        height:
+          type: number
+          format: double
+          minimum: 2
+          title: Height [mm]
+          description: Label height, specified in mm
+    PatchedLocation:
+      type: object
+      description: Detailed information about a stock location.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        barcode_hash:
+          type: string
+          readOnly: true
+          description: Unique hash of barcode data
+        name:
+          type: string
+          description: Name
+          maxLength: 100
+        level:
+          type: integer
+          readOnly: true
+        description:
+          type: string
+          description: Description (optional)
+          maxLength: 250
+        parent:
+          type: integer
+          nullable: true
+          title: Parent Location
+          description: Parent stock location
+        pathstring:
+          type: string
+          readOnly: true
+          title: Path
+          description: Path
+        path:
+          type: array
+          items:
+            type: object
+            additionalProperties: {}
+          readOnly: true
+          nullable: true
+        items:
+          type: integer
+          readOnly: true
+          title: Stock Items
+        sublocations:
+          type: integer
+          readOnly: true
+        owner:
+          type: integer
+          nullable: true
+          description: Select Owner
+        icon:
+          type: string
+          readOnly: true
+        custom_icon:
+          type: string
+          nullable: true
+          title: Icon
+          description: Icon (optional)
+          maxLength: 100
+        structural:
+          type: boolean
+          description: Stock items may not be directly located into a structural stock
+            locations, but may be located to child locations.
+        external:
+          type: boolean
+          description: This is an external stock location
+        location_type:
+          type: integer
+          nullable: true
+          description: Stock location type of this location
+        location_type_detail:
+          allOf:
+          - $ref: '#/components/schemas/StockLocationType'
+          readOnly: true
+          nullable: true
+        tags:
+          type: array
+          items:
+            type: string
+    PatchedMachineConfig:
+      type: object
+      description: Serializer for a MachineConfig.
+      properties:
+        pk:
+          type: string
+          format: uuid
+          readOnly: true
+          title: Id
+        name:
+          type: string
+          description: Name of machine
+          maxLength: 255
+        machine_type:
+          type: string
+          readOnly: true
+          description: Type of machine
+        driver:
+          type: string
+          readOnly: true
+          description: Driver used for the machine
+        initialized:
+          type: boolean
+          description: Serializer method for the initialized field.
+          readOnly: true
+        active:
+          type: boolean
+          description: Machines can be disabled
+        status:
+          type: integer
+          description: Serializer method for the status field.
+          readOnly: true
+        status_model:
+          type: string
+          nullable: true
+          description: Serializer method for the status model field.
+          readOnly: true
+        status_text:
+          type: string
+          description: Serializer method for the status text field.
+          readOnly: true
+        machine_errors:
+          type: array
+          items:
+            type: string
+          description: Serializer method for the errors field.
+          readOnly: true
+        is_driver_available:
+          type: boolean
+          description: Serializer method for the is_driver_available field.
+          readOnly: true
+        restart_required:
+          type: boolean
+          description: Serializer method for the restart_required field.
+          readOnly: true
+    PatchedMachineSetting:
+      type: object
+      description: Serializer for the MachineSetting model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          readOnly: true
+        value:
+          type: string
+          nullable: true
+        name:
+          type: string
+          readOnly: true
+        description:
+          type: string
+          readOnly: true
+        type:
+          type: string
+          readOnly: true
+        choices:
+          type: array
+          items: {}
+          description: Returns the choices available for a given item.
+          readOnly: true
+        model_name:
+          type: string
+          readOnly: true
+          nullable: true
+        model_filters:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        api_url:
+          type: string
+          readOnly: true
+          nullable: true
+        typ:
+          type: string
+          readOnly: true
+        required:
+          type: boolean
+          readOnly: true
+        config_type:
+          allOf:
+          - $ref: '#/components/schemas/ConfigTypeEnum'
+          readOnly: true
+    PatchedManufacturerPart:
+      type: object
+      description: Serializer for ManufacturerPart object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+          title: Base Part
+          description: Select part
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+        pretty_name:
+          type: string
+          readOnly: true
+          nullable: true
+        manufacturer:
+          type: integer
+        manufacturer_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        description:
+          type: string
+          nullable: true
+          description: Manufacturer part description
+          maxLength: 250
+        MPN:
+          type: string
+          nullable: true
+          description: Manufacturer Part Number
+          maxLength: 100
+        link:
+          type: string
+          format: uri
+          nullable: true
+          description: URL for external manufacturer part link
+          maxLength: 2000
+        barcode_hash:
+          type: string
+          description: Unique hash of barcode data
+          maxLength: 128
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        tags:
+          type: array
+          items:
+            type: string
+    PatchedManufacturerPartParameter:
+      type: object
+      description: Serializer for the ManufacturerPartParameter model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        manufacturer_part:
+          type: integer
+        manufacturer_part_detail:
+          allOf:
+          - $ref: '#/components/schemas/ManufacturerPart'
+          readOnly: true
+          nullable: true
+        name:
+          type: string
+          description: Parameter name
+          maxLength: 500
+        value:
+          type: string
+          description: Parameter value
+          maxLength: 500
+        units:
+          type: string
+          nullable: true
+          description: Parameter units
+          maxLength: 64
+    PatchedMeUser:
+      type: object
+      description: API serializer specifically for the 'me' endpoint.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        username:
+          type: string
+          description: Username
+        first_name:
+          type: string
+          description: First name of the user
+        last_name:
+          type: string
+          description: Last name of the user
+        email:
+          type: string
+          format: email
+          description: Email address of the user
+        groups:
+          type: array
+          items:
+            $ref: '#/components/schemas/Group'
+          readOnly: true
+        group_ids:
+          type: array
+          items:
+            type: integer
+            writeOnly: true
+          writeOnly: true
+        is_staff:
+          type: boolean
+          title: Staff
+          description: Does this user have staff permissions
+        is_superuser:
+          type: boolean
+          title: Superuser
+          description: Is this user a superuser
+        is_active:
+          type: boolean
+          title: Active
+          description: Is this user account active
+        profile:
+          allOf:
+          - $ref: '#/components/schemas/UserProfile'
+          readOnly: true
+    PatchedMetadata:
+      type: object
+      description: Serializer class for model metadata API access.
+      properties:
+        metadata: {}
+    PatchedNewsFeedEntry:
+      type: object
+      description: Serializer for the NewsFeedEntry model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        feed_id:
+          type: string
+          title: Id
+          maxLength: 250
+        title:
+          type: string
+          maxLength: 250
+        link:
+          type: string
+          format: uri
+          maxLength: 250
+        published:
+          type: string
+          format: date-time
+        author:
+          type: string
+          maxLength: 250
+        summary:
+          type: string
+          maxLength: 250
+        read:
+          type: boolean
+    PatchedNotificationMessage:
+      type: object
+      description: Serializer for the InvenTreeUserSetting model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        target:
+          type: object
+          additionalProperties: {}
+          description: Function to resolve generic object reference to target.
+          readOnly: true
+        source:
+          type: object
+          additionalProperties: {}
+          description: Function to resolve generic object reference to source.
+          readOnly: true
+        user:
+          type: integer
+          readOnly: true
+        category:
+          type: string
+          readOnly: true
+        name:
+          type: string
+          readOnly: true
+        message:
+          type: string
+          readOnly: true
+          nullable: true
+        creation:
+          type: string
+          format: date-time
+          readOnly: true
+        age:
+          type: integer
+          description: Age of the message in seconds.
+          readOnly: true
+        age_human:
+          type: string
+          description: Humanized age.
+          readOnly: true
+        read:
+          type: boolean
+    PatchedNotificationUserSetting:
+      type: object
+      description: Serializer for the PluginSetting model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          readOnly: true
+        value:
+          type: string
+          nullable: true
+        name:
+          type: string
+          readOnly: true
+        description:
+          type: string
+          readOnly: true
+        type:
+          type: string
+          readOnly: true
+        choices:
+          type: array
+          items: {}
+          description: Returns the choices available for a given item.
+          readOnly: true
+        model_name:
+          type: string
+          readOnly: true
+          nullable: true
+        model_filters:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        api_url:
+          type: string
+          readOnly: true
+          nullable: true
+        typ:
+          type: string
+          readOnly: true
+        required:
+          type: boolean
+          readOnly: true
+        method:
+          type: string
+          readOnly: true
+    PatchedPart:
+      type: object
+      description: |-
+        Serializer for complete detail information of a part.
+
+        Used when displaying all details of a single component.
+      properties:
+        active:
+          type: boolean
+          description: Is this part active?
+        assembly:
+          type: boolean
+          description: Can this part be built from other parts?
+        barcode_hash:
+          type: string
+          readOnly: true
+          description: Unique hash of barcode data
+        category:
+          type: integer
+          nullable: true
+        category_detail:
+          allOf:
+          - $ref: '#/components/schemas/Category'
+          readOnly: true
+          nullable: true
+        category_path:
+          type: array
+          items:
+            type: object
+            additionalProperties: {}
+          readOnly: true
+          nullable: true
+        category_name:
+          type: string
+          readOnly: true
+        component:
+          type: boolean
+          description: Can this part be used to build other parts?
+        creation_date:
+          type: string
+          format: date
+          readOnly: true
+          nullable: true
+        creation_user:
+          type: integer
+          nullable: true
+        default_expiry:
+          type: integer
+          minimum: 0
+          description: Expiry time (in days) for stock items of this part
+        default_location:
+          type: integer
+          nullable: true
+          description: Where is this item normally stored?
+        default_location_detail:
+          allOf:
+          - $ref: '#/components/schemas/DefaultLocation'
+          readOnly: true
+          nullable: true
+        default_supplier:
+          type: integer
+          nullable: true
+          description: Default supplier part
+        description:
+          type: string
+          description: Part description (optional)
+          maxLength: 250
+        full_name:
+          type: string
+          description: Format a 'full name' for this Part based on the format PART_NAME_FORMAT
+            defined in InvenTree settings.
+          readOnly: true
+        image:
+          type: string
+          format: uri
+          nullable: true
+        remote_image:
+          type: string
+          format: uri
+          writeOnly: true
+          description: URL of remote image file
+        existing_image:
+          type: string
+          writeOnly: true
+          description: Filename of an existing part image
+        IPN:
+          type: string
+          default: ''
+          maxLength: 100
+        is_template:
+          type: boolean
+          description: Is this part a template part?
+        keywords:
+          type: string
+          nullable: true
+          description: Part keywords to improve visibility in search results
+          maxLength: 250
+        last_stocktake:
+          type: string
+          format: date
+          nullable: true
+        link:
+          type: string
+          format: uri
+          nullable: true
+          description: Link to external URL
+          maxLength: 2000
+        locked:
+          type: boolean
+          description: Locked parts cannot be edited
+        minimum_stock:
+          type: number
+          format: double
+          default: 0.0
+        name:
+          type: string
+          description: Part name
+          maxLength: 100
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        parameters:
+          type: array
+          items:
+            $ref: '#/components/schemas/PartParameter'
+          readOnly: true
+          nullable: true
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        purchaseable:
+          type: boolean
+          description: Can this part be purchased from external suppliers?
+        revision:
+          type: string
+          nullable: true
+          default: ''
+          maxLength: 100
+        revision_of:
+          type: integer
+          nullable: true
+          description: Is this part a revision of another part?
+        revision_count:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Revisions
+        salable:
+          type: boolean
+          description: Can this part be sold to customers?
+        starred:
+          type: boolean
+          description: Return "true" if the part is starred by the current user.
+          readOnly: true
+        thumbnail:
+          type: string
+          readOnly: true
+        testable:
+          type: boolean
+          description: Can this part have test results recorded against it?
+        trackable:
+          type: boolean
+          description: Does this part have tracking for unique items?
+        units:
+          type: string
+          nullable: true
+          description: Units of measure for this part
+          maxLength: 20
+        variant_of:
+          type: integer
+          nullable: true
+          description: Is this part a variant of another part?
+        virtual:
+          type: boolean
+          description: Is this a virtual part, such as a software product or license?
+        pricing_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        pricing_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        pricing_updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        responsible:
+          type: integer
+          nullable: true
+        allocated_to_build_orders:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        allocated_to_sales_orders:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        building:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        category_default_location:
+          type: integer
+          readOnly: true
+          nullable: true
+        in_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        ordering:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+          title: On Order
+        required_for_build_orders:
+          type: integer
+          readOnly: true
+          nullable: true
+        required_for_sales_orders:
+          type: integer
+          readOnly: true
+          nullable: true
+        stock_item_count:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Stock Items
+        suppliers:
+          type: integer
+          readOnly: true
+          nullable: true
+        total_in_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+          title: Total Stock
+        external_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        unallocated_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        variant_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        duplicate:
+          allOf:
+          - $ref: '#/components/schemas/DuplicatePart'
+          writeOnly: true
+          title: Duplicate Part
+          description: Copy initial data from another Part
+        initial_stock:
+          allOf:
+          - $ref: '#/components/schemas/InitialStock'
+          writeOnly: true
+          description: Create Part with initial stock quantity
+        initial_supplier:
+          allOf:
+          - $ref: '#/components/schemas/InitialSupplier'
+          writeOnly: true
+          title: Supplier Information
+          description: Add initial supplier information for this part
+        copy_category_parameters:
+          type: boolean
+          default: true
+          description: Copy parameter templates from selected part category
+        tags:
+          type: array
+          items:
+            type: string
+    PatchedPartInternalPrice:
+      type: object
+      description: Serializer for internal prices for Part model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+        quantity:
+          type: number
+          format: double
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Purchase currency of this stock item
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+    PatchedPartParameter:
+      type: object
+      description: JSON serializers for the PartParameter model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+          description: Parent Part
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+        template:
+          type: integer
+          description: Parameter Template
+        template_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartParameterTemplate'
+          readOnly: true
+          nullable: true
+        data:
+          type: string
+          description: Parameter Value
+          maxLength: 500
+          minLength: 1
+        data_numeric:
+          type: number
+          format: double
+          nullable: true
+    PatchedPartParameterTemplate:
+      type: object
+      description: JSON serializer for the PartParameterTemplate model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Parameter Name
+          maxLength: 100
+        units:
+          type: string
+          description: Physical units for this parameter
+          maxLength: 25
+        description:
+          type: string
+          description: Parameter description
+          maxLength: 250
+        parts:
+          type: integer
+          readOnly: true
+          nullable: true
+          description: Number of parts using this template
+        checkbox:
+          type: boolean
+          description: Is this parameter a checkbox?
+        choices:
+          type: string
+          description: Valid choices for this parameter (comma-separated)
+          maxLength: 5000
+        selectionlist:
+          type: integer
+          nullable: true
+          title: Selection List
+          description: Selection list for this parameter
+    PatchedPartPricing:
+      type: object
+      description: Serializer for Part pricing information.
+      properties:
+        currency:
+          type: string
+          readOnly: true
+          nullable: true
+        updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        scheduled_for_update:
+          type: boolean
+          readOnly: true
+        bom_cost_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        bom_cost_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        purchase_cost_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        purchase_cost_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        internal_cost_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        internal_cost_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        supplier_price_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        supplier_price_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        variant_cost_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        variant_cost_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        override_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+          title: Minimum Price
+          description: Override calculated value for minimum price
+        override_min_currency:
+          type: string
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+          title: Minimum price currency
+        override_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+          title: Maximum Price
+          description: Override calculated value for maximum price
+        override_max_currency:
+          type: string
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+          title: Maximum price currency
+        overall_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        overall_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        sale_price_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        sale_price_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        sale_history_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        sale_history_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        update:
+          type: boolean
+          writeOnly: true
+          nullable: true
+          default: false
+          description: Update pricing for this part
+    PatchedPartRelation:
+      type: object
+      description: Serializer for a PartRelated model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part_1:
+          type: integer
+        part_1_detail:
+          allOf:
+          - $ref: '#/components/schemas/Part'
+          readOnly: true
+        part_2:
+          type: integer
+          description: Select Related Part
+        part_2_detail:
+          allOf:
+          - $ref: '#/components/schemas/Part'
+          readOnly: true
+        note:
+          type: string
+          description: Note for this relationship
+          maxLength: 500
+    PatchedPartSalePrice:
+      type: object
+      description: Serializer for sale prices for Part model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+        quantity:
+          type: number
+          format: double
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Purchase currency of this stock item
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+    PatchedPartStocktake:
+      type: object
+      description: Serializer for the PartStocktake model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        date:
+          type: string
+          format: date
+          readOnly: true
+          description: Date stocktake was performed
+        part:
+          type: integer
+          description: Part for stocktake
+        item_count:
+          type: integer
+          description: Number of individual stock entries at time of stocktake
+        quantity:
+          type: number
+          format: double
+        cost_min:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        cost_min_currency:
+          type: string
+          title: Currency
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        cost_max:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        cost_max_currency:
+          type: string
+          title: Currency
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        note:
+          type: string
+          title: Notes
+          description: Additional notes
+          maxLength: 250
+        user:
+          type: integer
+          readOnly: true
+          nullable: true
+          description: User who performed this stocktake
+        user_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+    PatchedPartStocktakeReport:
+      type: object
+      description: Serializer for stocktake report class.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        date:
+          type: string
+          format: date
+          readOnly: true
+        report:
+          type: string
+          format: uri
+          readOnly: true
+        part_count:
+          type: integer
+          readOnly: true
+          description: Number of parts covered by stocktake
+        user:
+          type: integer
+          readOnly: true
+          nullable: true
+          description: User who requested this stocktake report
+        user_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+    PatchedPartTestTemplate:
+      type: object
+      description: Serializer for the PartTestTemplate class.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          readOnly: true
+        part:
+          type: integer
+        test_name:
+          type: string
+          description: Enter a name for the test
+          maxLength: 100
+        description:
+          type: string
+          nullable: true
+          title: Test Description
+          description: Enter description for this test
+          maxLength: 100
+        enabled:
+          type: boolean
+          description: Is this test enabled?
+        required:
+          type: boolean
+          description: Is this test required to pass?
+        requires_value:
+          type: boolean
+          description: Does this test require a value when adding a test result?
+        requires_attachment:
+          type: boolean
+          description: Does this test require a file attachment when adding a test
+            result?
+        results:
+          type: integer
+          readOnly: true
+          description: Number of results recorded against this template
+        choices:
+          type: string
+          description: Valid choices for this test (comma-separated)
+          maxLength: 5000
+    PatchedPartThumbSerializerUpdate:
+      type: object
+      description: Serializer for updating Part thumbnail.
+      properties:
+        image:
+          type: string
+          format: uri
+    PatchedPluginActivate:
+      type: object
+      description: Serializer for activating or deactivating a plugin.
+      properties:
+        active:
+          type: boolean
+          default: true
+          title: Activate Plugin
+          description: Activate this plugin
+    PatchedPluginSetting:
+      type: object
+      description: Serializer for the PluginSetting model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          readOnly: true
+        value:
+          type: string
+          nullable: true
+        name:
+          type: string
+          readOnly: true
+        description:
+          type: string
+          readOnly: true
+        type:
+          type: string
+          readOnly: true
+        choices:
+          type: array
+          items: {}
+          description: Returns the choices available for a given item.
+          readOnly: true
+        model_name:
+          type: string
+          readOnly: true
+          nullable: true
+        model_filters:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        api_url:
+          type: string
+          readOnly: true
+          nullable: true
+        typ:
+          type: string
+          readOnly: true
+        required:
+          type: boolean
+          readOnly: true
+        plugin:
+          type: string
+          readOnly: true
+    PatchedPluginUninstall:
+      type: object
+      description: Serializer for uninstalling a plugin.
+      properties:
+        delete_config:
+          type: boolean
+          default: true
+          title: Delete configuration
+          description: Delete the plugin configuration from the database
+    PatchedProjectCode:
+      type: object
+      description: Serializer for the ProjectCode model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        code:
+          type: string
+          title: Project Code
+          description: Unique project code
+          maxLength: 50
+        description:
+          type: string
+          description: Project description
+          maxLength: 200
+        responsible:
+          type: integer
+          nullable: true
+          description: User or group responsible for this project
+        responsible_detail:
+          allOf:
+          - $ref: '#/components/schemas/Owner'
+          readOnly: true
+          nullable: true
+    PatchedPurchaseOrder:
+      type: object
+      description: Serializer for a PurchaseOrder object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        created_by:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+        creation_date:
+          type: string
+          format: date
+          nullable: true
+        issue_date:
+          type: string
+          format: date
+          readOnly: true
+          nullable: true
+          description: Date order was issued
+        start_date:
+          type: string
+          format: date
+          nullable: true
+          description: Scheduled start date for this order
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          description: Expected date for order delivery. Order will be overdue after
+            this date.
+        description:
+          type: string
+          description: Order description (optional)
+          maxLength: 250
+        line_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        completed_lines:
+          type: integer
+          readOnly: true
+          nullable: true
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        project_code:
+          type: integer
+          nullable: true
+          description: Select project code for this order
+        project_code_label:
+          type: string
+          readOnly: true
+          nullable: true
+        project_code_detail:
+          allOf:
+          - $ref: '#/components/schemas/ProjectCode'
+          readOnly: true
+          nullable: true
+        reference:
+          type: string
+        responsible:
+          type: integer
+          nullable: true
+          description: User or group responsible for this order
+        responsible_detail:
+          allOf:
+          - $ref: '#/components/schemas/Owner'
+          readOnly: true
+          nullable: true
+        contact:
+          type: integer
+          nullable: true
+          description: Point of contact for this order
+        contact_detail:
+          allOf:
+          - $ref: '#/components/schemas/Contact'
+          readOnly: true
+          nullable: true
+        address:
+          type: integer
+          nullable: true
+          description: Company address for this order
+        address_detail:
+          allOf:
+          - $ref: '#/components/schemas/AddressBrief'
+          readOnly: true
+          nullable: true
+        status:
+          type: integer
+          readOnly: true
+          title: Order Status
+        status_text:
+          type: string
+          readOnly: true
+        status_custom_key:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Custom status key
+          description: |-
+            Additional status information for this item
+
+            * `10` - Pending
+            * `20` - Placed
+            * `25` - On Hold
+            * `30` - Complete
+            * `40` - Cancelled
+            * `50` - Lost
+            * `60` - Returned
+
+            Additional custom status keys may be retrieved from the corresponding 'status_retrieve' call.
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        barcode_hash:
+          type: string
+          readOnly: true
+        overdue:
+          type: boolean
+          readOnly: true
+          nullable: true
+        duplicate:
+          allOf:
+          - $ref: '#/components/schemas/DuplicateOrder'
+          writeOnly: true
+          title: Duplicate Order
+          description: Specify options for duplicating this order
+        complete_date:
+          type: string
+          format: date
+          readOnly: true
+          nullable: true
+          title: Completion Date
+          description: Date order was completed
+        supplier:
+          type: integer
+          nullable: true
+          description: Company from which the items are being ordered
+        supplier_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        supplier_reference:
+          type: string
+          description: Supplier order reference code
+          maxLength: 64
+        supplier_name:
+          type: string
+          readOnly: true
+        total_price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        order_currency:
+          type: string
+          nullable: true
+          description: |-
+            Currency for this order (leave blank to use company default)
+
+            * `` - ---------
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        destination:
+          type: integer
+          nullable: true
+          description: Destination for received items
+    PatchedPurchaseOrderExtraLine:
+      type: object
+      description: Serializer for a PurchaseOrderExtraLine object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        description:
+          type: string
+          description: Line item description (optional)
+          maxLength: 250
+        quantity:
+          type: number
+          format: double
+        reference:
+          type: string
+          description: Line item reference
+          maxLength: 100
+        notes:
+          type: string
+          description: Line item notes
+          maxLength: 500
+        context:
+          nullable: true
+          description: Additional context for this line
+        order:
+          type: integer
+          description: Purchase Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/PurchaseOrder'
+          readOnly: true
+          nullable: true
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+    PatchedPurchaseOrderLineItem:
+      type: object
+      description: Serializer class for the PurchaseOrderLineItem model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+          nullable: true
+          title: Supplier Part
+        quantity:
+          type: number
+          format: double
+          minimum: 0
+        reference:
+          type: string
+          description: Line item reference
+          maxLength: 100
+        notes:
+          type: string
+          description: Line item notes
+          maxLength: 500
+        order:
+          type: integer
+          description: Purchase Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/PurchaseOrder'
+          readOnly: true
+          nullable: true
+        overdue:
+          type: boolean
+          readOnly: true
+          nullable: true
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+        supplier_part_detail:
+          allOf:
+          - $ref: '#/components/schemas/SupplierPart'
+          readOnly: true
+          nullable: true
+        received:
+          type: number
+          format: double
+          readOnly: true
+          default: 0.0
+        purchase_price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        purchase_price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Purchase price currency
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        auto_pricing:
+          type: boolean
+          default: true
+          description: Automatically calculate purchase price based on supplier part
+            data
+        destination:
+          type: integer
+          nullable: true
+          description: Destination for received items
+        destination_detail:
+          allOf:
+          - $ref: '#/components/schemas/LocationBrief'
+          readOnly: true
+          nullable: true
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          description: Target date for this line item (leave blank to use the target
+            date from the order)
+        total_price:
+          type: number
+          format: double
+          readOnly: true
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        merge_items:
+          type: boolean
+          writeOnly: true
+          default: true
+          description: Merge items with the same part, destination and target date
+            into one line item
+        sku:
+          type: string
+          readOnly: true
+          nullable: true
+        mpn:
+          type: string
+          readOnly: true
+          nullable: true
+        ipn:
+          type: string
+          readOnly: true
+          nullable: true
+          title: Internal Part Number
+        internal_part:
+          type: integer
+          readOnly: true
+        internal_part_name:
+          type: string
+          readOnly: true
+    PatchedReportAsset:
+      type: object
+      description: Serializer class for the ReportAsset model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        asset:
+          type: string
+          format: uri
+        description:
+          type: string
+          description: Asset file description
+          maxLength: 250
+    PatchedReportSnippet:
+      type: object
+      description: Serializer class for the ReportSnippet model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        snippet:
+          type: string
+          format: uri
+        description:
+          type: string
+          description: Snippet file description
+          maxLength: 250
+    PatchedReportTemplate:
+      type: object
+      description: Serializer class for report template model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Template name
+          maxLength: 100
+        description:
+          type: string
+          description: Template description
+          maxLength: 250
+        model_type:
+          $ref: '#/components/schemas/TemplateModelTypeEnum'
+        template:
+          type: string
+          format: uri
+        filters:
+          type: string
+          description: Template query filters (comma-separated list of key=value pairs)
+          maxLength: 250
+        filename_pattern:
+          type: string
+          description: Pattern for generating filenames
+          maxLength: 100
+        enabled:
+          type: boolean
+          description: Template is enabled
+        revision:
+          type: integer
+          readOnly: true
+        attach_to_model:
+          type: boolean
+          title: Attach to Model on Print
+          description: Save report output as an attachment against linked model instance
+            when printing
+        page_size:
+          allOf:
+          - $ref: '#/components/schemas/PageSizeEnum'
+          default: A4
+        landscape:
+          type: boolean
+          description: Render report in landscape orientation
+    PatchedReturnOrder:
+      type: object
+      description: Serializer for the ReturnOrder model class.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        created_by:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+        creation_date:
+          type: string
+          format: date
+          nullable: true
+        issue_date:
+          type: string
+          format: date
+          nullable: true
+          description: Date order was issued
+        start_date:
+          type: string
+          format: date
+          nullable: true
+          description: Scheduled start date for this order
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          description: Expected date for order delivery. Order will be overdue after
+            this date.
+        description:
+          type: string
+          description: Order description (optional)
+          maxLength: 250
+        line_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        completed_lines:
+          type: integer
+          readOnly: true
+          nullable: true
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        project_code:
+          type: integer
+          nullable: true
+          description: Select project code for this order
+        project_code_label:
+          type: string
+          readOnly: true
+          nullable: true
+        project_code_detail:
+          allOf:
+          - $ref: '#/components/schemas/ProjectCode'
+          readOnly: true
+          nullable: true
+        reference:
+          type: string
+        responsible:
+          type: integer
+          nullable: true
+          description: User or group responsible for this order
+        responsible_detail:
+          allOf:
+          - $ref: '#/components/schemas/Owner'
+          readOnly: true
+          nullable: true
+        contact:
+          type: integer
+          nullable: true
+          description: Point of contact for this order
+        contact_detail:
+          allOf:
+          - $ref: '#/components/schemas/Contact'
+          readOnly: true
+          nullable: true
+        address:
+          type: integer
+          nullable: true
+          description: Company address for this order
+        address_detail:
+          allOf:
+          - $ref: '#/components/schemas/AddressBrief'
+          readOnly: true
+          nullable: true
+        status:
+          type: integer
+          readOnly: true
+          title: Order Status
+        status_text:
+          type: string
+          readOnly: true
+        status_custom_key:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Custom status key
+          description: |-
+            Additional status information for this item
+
+            * `10` - Pending
+            * `20` - In Progress
+            * `25` - On Hold
+            * `30` - Complete
+            * `40` - Cancelled
+
+            Additional custom status keys may be retrieved from the corresponding 'status_retrieve' call.
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        barcode_hash:
+          type: string
+          readOnly: true
+        overdue:
+          type: boolean
+          readOnly: true
+          nullable: true
+        duplicate:
+          allOf:
+          - $ref: '#/components/schemas/DuplicateOrder'
+          writeOnly: true
+          title: Duplicate Order
+          description: Specify options for duplicating this order
+        complete_date:
+          type: string
+          format: date
+          nullable: true
+          title: Completion Date
+          description: Date order was completed
+        customer:
+          type: integer
+          nullable: true
+          description: Company from which items are being returned
+        customer_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        customer_reference:
+          type: string
+          description: Customer order reference code
+          maxLength: 64
+        order_currency:
+          type: string
+          nullable: true
+          description: |-
+            Currency for this order (leave blank to use company default)
+
+            * `` - ---------
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        total_price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+    PatchedReturnOrderExtraLine:
+      type: object
+      description: Serializer for a ReturnOrderExtraLine object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        description:
+          type: string
+          description: Line item description (optional)
+          maxLength: 250
+        quantity:
+          type: number
+          format: double
+        reference:
+          type: string
+          description: Line item reference
+          maxLength: 100
+        notes:
+          type: string
+          description: Line item notes
+          maxLength: 500
+        context:
+          nullable: true
+          description: Additional context for this line
+        order:
+          type: integer
+          description: Return Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/ReturnOrder'
+          readOnly: true
+          nullable: true
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+    PatchedReturnOrderLineItem:
+      type: object
+      description: Serializer for a ReturnOrderLineItem object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        order:
+          type: integer
+          description: Return Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/ReturnOrder'
+          readOnly: true
+          nullable: true
+        item:
+          type: integer
+          description: Select item to return from customer
+        item_detail:
+          allOf:
+          - $ref: '#/components/schemas/StockItem'
+          readOnly: true
+          nullable: true
+        quantity:
+          type: number
+          format: double
+          description: Quantity to return
+        received_date:
+          type: string
+          format: date
+          nullable: true
+          description: The date this this return item was received
+        outcome:
+          allOf:
+          - $ref: '#/components/schemas/OutcomeEnum'
+          description: |-
+            Outcome for this line item
+
+            * `10` - Pending
+            * `20` - Return
+            * `30` - Repair
+            * `40` - Replace
+            * `50` - Refund
+            * `60` - Reject
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Line price currency
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        reference:
+          type: string
+          description: Line item reference
+          maxLength: 100
+        notes:
+          type: string
+          description: Line item notes
+          maxLength: 500
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          description: Target date for this line item (leave blank to use the target
+            date from the order)
+    PatchedRuleSet:
+      type: object
+      description: Serializer for a RuleSet.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          allOf:
+          - $ref: '#/components/schemas/NameEnum'
+          readOnly: true
+          description: |-
+            Permission set
+
+            * `admin` - Admin
+            * `part_category` - Part Categories
+            * `part` - Parts
+            * `stocktake` - Stocktake
+            * `stock_location` - Stock Locations
+            * `stock` - Stock Items
+            * `build` - Build Orders
+            * `purchase_order` - Purchase Orders
+            * `sales_order` - Sales Orders
+            * `return_order` - Return Orders
+        label:
+          type: string
+          description: Return the translated label for this ruleset.
+          readOnly: true
+        group:
+          type: integer
+          readOnly: true
+          description: Group
+        can_view:
+          type: boolean
+          title: View
+          description: Permission to view items
+        can_add:
+          type: boolean
+          title: Add
+          description: Permission to add items
+        can_change:
+          type: boolean
+          title: Change
+          description: Permissions to edit items
+        can_delete:
+          type: boolean
+          title: Delete
+          description: Permission to delete items
+    PatchedSalesOrder:
+      type: object
+      description: Serializer for the SalesOrder model class.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        created_by:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+        creation_date:
+          type: string
+          format: date
+          nullable: true
+        issue_date:
+          type: string
+          format: date
+          nullable: true
+          description: Date order was issued
+        start_date:
+          type: string
+          format: date
+          nullable: true
+          description: Scheduled start date for this order
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          description: Expected date for order delivery. Order will be overdue after
+            this date.
+        description:
+          type: string
+          description: Order description (optional)
+          maxLength: 250
+        line_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        completed_lines:
+          type: integer
+          readOnly: true
+          nullable: true
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        project_code:
+          type: integer
+          nullable: true
+          description: Select project code for this order
+        project_code_label:
+          type: string
+          readOnly: true
+          nullable: true
+        project_code_detail:
+          allOf:
+          - $ref: '#/components/schemas/ProjectCode'
+          readOnly: true
+          nullable: true
+        reference:
+          type: string
+        responsible:
+          type: integer
+          nullable: true
+          description: User or group responsible for this order
+        responsible_detail:
+          allOf:
+          - $ref: '#/components/schemas/Owner'
+          readOnly: true
+          nullable: true
+        contact:
+          type: integer
+          nullable: true
+          description: Point of contact for this order
+        contact_detail:
+          allOf:
+          - $ref: '#/components/schemas/Contact'
+          readOnly: true
+          nullable: true
+        address:
+          type: integer
+          nullable: true
+          description: Company address for this order
+        address_detail:
+          allOf:
+          - $ref: '#/components/schemas/AddressBrief'
+          readOnly: true
+          nullable: true
+        status:
+          type: integer
+          readOnly: true
+          title: Order Status
+        status_text:
+          type: string
+          readOnly: true
+        status_custom_key:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Custom status key
+          description: |-
+            Additional status information for this item
+
+            * `10` - Pending
+            * `15` - In Progress
+            * `20` - Shipped
+            * `25` - On Hold
+            * `30` - Complete
+            * `40` - Cancelled
+            * `50` - Lost
+            * `60` - Returned
+
+            Additional custom status keys may be retrieved from the corresponding 'status_retrieve' call.
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        barcode_hash:
+          type: string
+          readOnly: true
+        overdue:
+          type: boolean
+          readOnly: true
+          nullable: true
+        duplicate:
+          allOf:
+          - $ref: '#/components/schemas/DuplicateOrder'
+          writeOnly: true
+          title: Duplicate Order
+          description: Specify options for duplicating this order
+        customer:
+          type: integer
+          nullable: true
+          description: Company to which the items are being sold
+        customer_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        customer_reference:
+          type: string
+          description: Customer order reference code
+          maxLength: 64
+        shipment_date:
+          type: string
+          format: date
+          readOnly: true
+          nullable: true
+        total_price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        order_currency:
+          type: string
+          nullable: true
+          description: |-
+            Currency for this order (leave blank to use company default)
+
+            * `` - ---------
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        shipments_count:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Shipments
+        completed_shipments_count:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Completed Shipments
+    PatchedSalesOrderAllocation:
+      type: object
+      description: |-
+        Serializer for the SalesOrderAllocation model.
+
+        This includes some fields from the related model objects.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        item:
+          type: integer
+          description: Select stock item to allocate
+        quantity:
+          type: number
+          format: double
+        shipment:
+          type: integer
+          nullable: true
+          description: Sales order shipment reference
+        line:
+          type: integer
+          readOnly: true
+        part:
+          type: integer
+          readOnly: true
+        order:
+          type: integer
+          readOnly: true
+        serial:
+          type: string
+          readOnly: true
+          nullable: true
+        location:
+          type: integer
+          readOnly: true
+        item_detail:
+          allOf:
+          - $ref: '#/components/schemas/StockItemSerializerBrief'
+          readOnly: true
+          nullable: true
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/SalesOrder'
+          readOnly: true
+          nullable: true
+        customer_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        location_detail:
+          allOf:
+          - $ref: '#/components/schemas/LocationBrief'
+          readOnly: true
+          nullable: true
+        shipment_detail:
+          allOf:
+          - $ref: '#/components/schemas/SalesOrderShipment'
+          readOnly: true
+    PatchedSalesOrderExtraLine:
+      type: object
+      description: Serializer for a SalesOrderExtraLine object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        description:
+          type: string
+          description: Line item description (optional)
+          maxLength: 250
+        quantity:
+          type: number
+          format: double
+        reference:
+          type: string
+          description: Line item reference
+          maxLength: 100
+        notes:
+          type: string
+          description: Line item notes
+          maxLength: 500
+        context:
+          nullable: true
+          description: Additional context for this line
+        order:
+          type: integer
+          description: Sales Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/SalesOrder'
+          readOnly: true
+          nullable: true
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+    PatchedSalesOrderLineItem:
+      type: object
+      description: Serializer for a SalesOrderLineItem object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        allocated:
+          type: number
+          format: double
+          readOnly: true
+        customer_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        quantity:
+          type: number
+          format: double
+        reference:
+          type: string
+          description: Line item reference
+          maxLength: 100
+        notes:
+          type: string
+          description: Line item notes
+          maxLength: 500
+        order:
+          type: integer
+          description: Sales Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/SalesOrder'
+          readOnly: true
+          nullable: true
+        overdue:
+          type: boolean
+          readOnly: true
+          nullable: true
+        part:
+          type: integer
+          nullable: true
+          description: Part
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+        sale_price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        sale_price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Sale price currency
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        shipped:
+          type: number
+          format: double
+          readOnly: true
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          description: Target date for this line item (leave blank to use the target
+            date from the order)
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        available_stock:
+          type: number
+          format: double
+          readOnly: true
+        available_variant_stock:
+          type: number
+          format: double
+          readOnly: true
+        building:
+          type: number
+          format: double
+          readOnly: true
+          title: In Production
+        on_order:
+          type: number
+          format: double
+          readOnly: true
+    PatchedSalesOrderShipment:
+      type: object
+      description: Serializer for the SalesOrderShipment class.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        order:
+          type: integer
+          description: Sales Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/SalesOrder'
+          readOnly: true
+          nullable: true
+        allocated_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        shipment_date:
+          type: string
+          format: date
+          nullable: true
+          description: Date of shipment
+        delivery_date:
+          type: string
+          format: date
+          nullable: true
+          description: Date of delivery of shipment
+        checked_by:
+          type: integer
+          nullable: true
+          description: User who checked this shipment
+        reference:
+          type: string
+          default: '1'
+          title: Shipment
+          description: Shipment number
+          maxLength: 100
+        tracking_number:
+          type: string
+          description: Shipment tracking information
+          maxLength: 100
+        invoice_number:
+          type: string
+          description: Reference number for associated invoice
+          maxLength: 100
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+    PatchedSelectionEntry:
+      type: object
+      description: Serializer for a selection entry.
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        value:
+          type: string
+          description: Value of the selection list entry
+          maxLength: 255
+        label:
+          type: string
+          description: Label for the selection list entry
+          maxLength: 255
+        description:
+          type: string
+          description: Description of the selection list entry
+          maxLength: 250
+        active:
+          type: boolean
+          description: Is this selection list entry active?
+        list:
+          type: integer
+          nullable: true
+          title: Selection List
+          description: Selection list to which this entry belongs
+    PatchedSelectionList:
+      type: object
+      description: Serializer for a selection list.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Name of the selection list
+          maxLength: 100
+        description:
+          type: string
+          description: Description of the selection list
+          maxLength: 250
+        active:
+          type: boolean
+          description: Can this selection list be used?
+        locked:
+          type: boolean
+          description: Is this selection list locked?
+        source_plugin:
+          type: integer
+          nullable: true
+          description: Plugin which provides the selection list
+        source_string:
+          type: string
+          description: Optional string identifying the source used for this list
+          maxLength: 1000
+        default:
+          allOf:
+          - $ref: '#/components/schemas/SelectionEntry'
+          readOnly: true
+        created:
+          type: string
+          format: date-time
+          readOnly: true
+          description: Date and time that the selection list was created
+        last_updated:
+          type: string
+          format: date-time
+          readOnly: true
+          description: Date and time that the selection list was last updated
+        choices:
+          type: array
+          items:
+            $ref: '#/components/schemas/SelectionEntry'
+        entry_count:
+          type: integer
+          readOnly: true
+    PatchedStockItem:
+      type: object
+      description: |-
+        Serializer for a StockItem.
+
+        - Includes serialization for the linked part
+        - Includes serialization for the item location
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+          description: Base Part
+        quantity:
+          type: number
+          format: double
+        serial:
+          type: string
+          nullable: true
+          title: Serial Number
+          description: Serial number for this item
+          maxLength: 100
+        batch:
+          type: string
+          nullable: true
+          title: Batch Code
+          description: Batch code for this stock item
+          maxLength: 100
+        location:
+          type: integer
+          nullable: true
+          title: Stock Location
+          description: Where is this stock item located?
+        belongs_to:
+          type: integer
+          nullable: true
+          title: Installed In
+          description: Is this item installed in another item?
+        build:
+          type: integer
+          nullable: true
+          title: Source Build
+          description: Build for this stock item
+        consumed_by:
+          type: integer
+          nullable: true
+          description: Build order which consumed this stock item
+        customer:
+          type: integer
+          nullable: true
+          description: Customer
+        delete_on_deplete:
+          type: boolean
+          description: Delete this Stock Item when stock is depleted
+        expiry_date:
+          type: string
+          format: date
+          nullable: true
+          description: Expiry date for stock item. Stock will be considered expired
+            after this date
+        in_stock:
+          type: boolean
+          readOnly: true
+        is_building:
+          type: boolean
+        link:
+          type: string
+          format: uri
+          title: External Link
+          description: Link to external URL
+          maxLength: 2000
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        owner:
+          type: integer
+          nullable: true
+          description: Select Owner
+        packaging:
+          type: string
+          nullable: true
+          description: Packaging this stock item is stored in
+          maxLength: 50
+        parent:
+          type: integer
+          readOnly: true
+          title: Parent Item
+          description: Parent stock item
+        purchase_order:
+          type: integer
+          nullable: true
+          title: Source Purchase Order
+          description: Purchase order for this stock item
+        purchase_order_reference:
+          type: string
+          readOnly: true
+          nullable: true
+        sales_order:
+          type: integer
+          nullable: true
+          title: Destination Sales Order
+        sales_order_reference:
+          type: string
+          readOnly: true
+          nullable: true
+        status:
+          allOf:
+          - $ref: '#/components/schemas/StockItemStatusEnum'
+          minimum: 0
+        status_text:
+          type: string
+          readOnly: true
+          title: Status
+        status_custom_key:
+          type: integer
+          nullable: true
+          title: Custom status key
+          description: |-
+            Additional status information for this item
+
+            * `10` - OK
+            * `50` - Attention needed
+            * `55` - Damaged
+            * `60` - Destroyed
+            * `65` - Rejected
+            * `70` - Lost
+            * `75` - Quarantined
+            * `85` - Returned
+
+            Additional custom status keys may be retrieved from the corresponding 'status_retrieve' call.
+        supplier_part:
+          type: integer
+          nullable: true
+          description: Select a matching supplier part for this stock item
+        SKU:
+          type: string
+          readOnly: true
+          nullable: true
+          title: Supplier Part Number
+        MPN:
+          type: string
+          readOnly: true
+          nullable: true
+          title: Manufacturer Part Number
+        barcode_hash:
+          type: string
+          readOnly: true
+          description: Unique hash of barcode data
+        updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+          description: Timestamp of last update
+        stocktake_date:
+          type: string
+          format: date
+          readOnly: true
+          nullable: true
+        purchase_price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+          description: Purchase price of this stock item, per unit or pack
+        purchase_price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Purchase currency of this stock item
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        use_pack_size:
+          type: boolean
+          writeOnly: true
+          nullable: true
+          description: 'Use pack size when adding: the quantity defined is the number
+            of packs'
+        tests:
+          type: array
+          items:
+            $ref: '#/components/schemas/StockItemTestResult'
+          readOnly: true
+          nullable: true
+        allocated:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+          title: Allocated Quantity
+        expired:
+          type: boolean
+          readOnly: true
+          nullable: true
+        installed_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        child_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        location_path:
+          type: array
+          items:
+            type: object
+            additionalProperties: {}
+          readOnly: true
+          nullable: true
+        stale:
+          type: boolean
+          readOnly: true
+          nullable: true
+        tracking_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        tags:
+          type: array
+          items:
+            type: string
+        supplier_part_detail:
+          allOf:
+          - $ref: '#/components/schemas/SupplierPart'
+          readOnly: true
+          nullable: true
+          title: Supplier Part
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+          title: Part
+        location_detail:
+          allOf:
+          - $ref: '#/components/schemas/LocationBrief'
+          readOnly: true
+          nullable: true
+          title: Location
+    PatchedStockItemTestResult:
+      type: object
+      description: Serializer for the StockItemTestResult model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        stock_item:
+          type: integer
+        result:
+          type: boolean
+          description: Test result
+        value:
+          type: string
+          description: Test output value
+          maxLength: 500
+        attachment:
+          type: string
+          format: uri
+          nullable: true
+          description: Test result attachment
+        notes:
+          type: string
+          description: Test notes
+          maxLength: 500
+        test_station:
+          type: string
+          description: The identifier of the test station where the test was performed
+          maxLength: 500
+        started_datetime:
+          type: string
+          format: date-time
+          nullable: true
+          title: Started
+          description: The timestamp of the test start
+        finished_datetime:
+          type: string
+          format: date-time
+          nullable: true
+          title: Finished
+          description: The timestamp of the test finish
+        user:
+          type: integer
+          readOnly: true
+          nullable: true
+        user_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+          nullable: true
+        date:
+          type: string
+          format: date-time
+          readOnly: true
+        template:
+          type: integer
+          nullable: true
+          title: Test template for this result
+          description: Template
+        template_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartTestTemplate'
+          readOnly: true
+          nullable: true
+    PatchedStockLocationType:
+      type: object
+      description: Serializer for StockLocationType model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Name
+          maxLength: 100
+        description:
+          type: string
+          description: Description (optional)
+          maxLength: 250
+        icon:
+          type: string
+          description: Default icon for all locations that have no icon set (optional)
+          maxLength: 100
+        location_count:
+          type: integer
+          readOnly: true
+          nullable: true
+    PatchedSupplierPart:
+      type: object
+      description: Serializer for SupplierPart object.
+      properties:
+        available:
+          type: number
+          format: double
+        availability_updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+          description: Date of last update of availability data
+        description:
+          type: string
+          nullable: true
+          description: Supplier part description
+          maxLength: 250
+        in_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        on_order:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        link:
+          type: string
+          format: uri
+          nullable: true
+          description: URL for external supplier part link
+          maxLength: 2000
+        active:
+          type: boolean
+          description: Is this supplier part active?
+        manufacturer_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+          title: Manufacturer
+        manufacturer_part:
+          type: integer
+          nullable: true
+          description: Select manufacturer part
+        manufacturer_part_detail:
+          allOf:
+          - $ref: '#/components/schemas/ManufacturerPart'
+          readOnly: true
+          nullable: true
+          title: Manufacturer Part
+        MPN:
+          type: string
+          readOnly: true
+          nullable: true
+        note:
+          type: string
+          nullable: true
+          description: Notes
+          maxLength: 100
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        barcode_hash:
+          type: string
+          readOnly: true
+          description: Unique hash of barcode data
+        packaging:
+          type: string
+          nullable: true
+          description: Part packaging
+          maxLength: 50
+        pack_quantity:
+          type: string
+          description: Total quantity supplied in a single pack. Leave empty for single
+            items.
+          maxLength: 25
+        pack_quantity_native:
+          type: number
+          format: double
+          readOnly: true
+        part:
+          type: integer
+          title: Base Part
+          description: Select part
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+          title: Part
+        pretty_name:
+          type: string
+          readOnly: true
+          nullable: true
+        SKU:
+          type: string
+          description: Supplier stock keeping unit
+          maxLength: 100
+        supplier:
+          type: integer
+        supplier_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+          title: Supplier
+        updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        tags:
+          type: array
+          items:
+            type: string
+    PatchedSupplierPriceBreak:
+      type: object
+      description: Serializer for SupplierPriceBreak object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/SupplierPart'
+          readOnly: true
+          nullable: true
+        quantity:
+          type: number
+          format: double
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        supplier:
+          type: integer
+          readOnly: true
+        supplier_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+          description: Timestamp of last update
+    PatchedUserProfile:
+      type: object
+      description: Serializer for the UserProfile model.
+      properties:
+        language:
+          type: string
+          nullable: true
+          description: Preferred language for the user
+          maxLength: 10
+        theme:
+          nullable: true
+          description: Settings for the web UI as JSON - do not edit manually!
+        widgets:
+          nullable: true
+          description: Settings for the dashboard widgets as JSON - do not edit manually!
+        displayname:
+          type: string
+          nullable: true
+          title: Display Name
+          description: Chosen display name for the user
+          maxLength: 255
+        position:
+          type: string
+          nullable: true
+          description: Main job title or position
+          maxLength: 255
+        status:
+          type: string
+          nullable: true
+          description: User status message
+          maxLength: 2000
+        location:
+          type: string
+          nullable: true
+          description: User location information
+          maxLength: 2000
+        active:
+          type: boolean
+          description: User is actively using the system
+        contact:
+          type: string
+          nullable: true
+          description: Preferred contact information for the user
+          maxLength: 255
+        type:
+          allOf:
+          - $ref: '#/components/schemas/UserTypeEnum'
+          title: User Type
+          description: |-
+            Which type of user is this?
+
+            * `bot` - Bot
+            * `internal` - Internal
+            * `external` - External
+            * `guest` - Guest
+        organisation:
+          type: string
+          nullable: true
+          description: Users primary organisation/affiliation
+          maxLength: 255
+        primary_group:
+          type: integer
+          nullable: true
+          description: Primary group for the user
+    PatchedUserSettings:
+      type: object
+      description: Serializer for the InvenTreeUserSetting model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          readOnly: true
+        value:
+          type: string
+          nullable: true
+        name:
+          type: string
+          readOnly: true
+        description:
+          type: string
+          readOnly: true
+        user:
+          type: integer
+          readOnly: true
+        type:
+          type: string
+          readOnly: true
+        units:
+          type: string
+          readOnly: true
+        choices:
+          type: array
+          items: {}
+          description: Returns the choices available for a given item.
+          readOnly: true
+        model_name:
+          type: string
+          readOnly: true
+          nullable: true
+        api_url:
+          type: string
+          readOnly: true
+          nullable: true
+        typ:
+          type: string
+          readOnly: true
+    PendingTask:
+      type: object
+      description: Serializer for an individual pending task object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          description: Name of the target cluster
+          maxLength: 100
+        lock:
+          type: string
+          format: date-time
+          description: Lock time
+        task_id:
+          type: string
+          description: Unique task ID
+        name:
+          type: string
+          description: Task name
+        func:
+          type: string
+          title: Function
+          description: Function name
+        args:
+          type: string
+          title: Arguments
+          description: Task arguments
+        kwargs:
+          type: string
+          title: Keyword Arguments
+          description: Task keyword arguments
+      required:
+      - args
+      - func
+      - key
+      - kwargs
+      - lock
+      - name
+      - pk
+      - task_id
+    PluginActivate:
+      type: object
+      description: Serializer for activating or deactivating a plugin.
+      properties:
+        active:
+          type: boolean
+          default: true
+          title: Activate Plugin
+          description: Activate this plugin
+    PluginAdminDetail:
+      type: object
+      description: Serializer for a PluginConfig with admin details.
+      properties:
+        source:
+          type: string
+          nullable: true
+          title: Source File
+          description: Path to the source file for admin integration
+        context:
+          nullable: true
+          description: Optional context data for the admin integration
+      required:
+      - context
+      - source
+    PluginConfig:
+      type: object
+      description: Serializer for a PluginConfig.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          readOnly: true
+          description: Key of plugin
+        name:
+          type: string
+          nullable: true
+          description: PluginName of the plugin
+          maxLength: 255
+        package_name:
+          type: string
+          nullable: true
+          description: Name of the installed package, if the plugin was installed
+            via PIP
+          maxLength: 255
+        active:
+          type: boolean
+          description: Is the plugin active
+        meta:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        mixins:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        is_builtin:
+          type: boolean
+          description: Return True if this is a 'builtin' plugin.
+          readOnly: true
+        is_sample:
+          type: boolean
+          description: Is this plugin a sample app?
+          readOnly: true
+        is_installed:
+          type: boolean
+          description: |-
+            Simple check to determine if this plugin is installed.
+
+            A plugin might not be installed if it has been removed from the system,
+            but the PluginConfig associated with it still exists.
+          readOnly: true
+        is_package:
+          type: boolean
+          description: Return True if this is a 'package' plugin.
+          readOnly: true
+        is_mandatory:
+          type: boolean
+          readOnly: true
+      required:
+      - is_builtin
+      - is_installed
+      - is_mandatory
+      - is_package
+      - is_sample
+      - key
+      - meta
+      - mixins
+      - pk
+    PluginConfigInstall:
+      type: object
+      description: Serializer for installing a new plugin.
+      properties:
+        url:
+          type: string
+          title: Source URL
+          description: Source for the package - this can be a custom registry or a
+            VCS path
+        packagename:
+          type: string
+          title: Package Name
+          description: Name for the Plugin Package - can also contain a version indicator
+        version:
+          type: string
+          description: Version specifier for the plugin. Leave blank for latest version.
+        confirm:
+          type: boolean
+          title: Confirm plugin installation
+          description: This will install this plugin now into the current instance.
+            The instance will go into maintenance.
+      required:
+      - confirm
+    PluginRegistryError:
+      type: object
+      description: Serializer for a plugin registry error.
+      properties:
+        stage:
+          type: string
+        name:
+          type: string
+        message:
+          type: string
+      required:
+      - message
+      - name
+      - stage
+    PluginRegistryStatus:
+      type: object
+      description: Serializer for plugin registry status.
+      properties:
+        active_plugins:
+          type: integer
+          readOnly: true
+        registry_errors:
+          type: array
+          items:
+            $ref: '#/components/schemas/PluginRegistryError'
+      required:
+      - active_plugins
+      - registry_errors
+    PluginReload:
+      type: object
+      description: Serializer for remotely forcing plugin registry reload.
+      properties:
+        full_reload:
+          type: boolean
+          default: false
+          description: Perform a full reload of the plugin registry
+        force_reload:
+          type: boolean
+          default: false
+          description: Force a reload of the plugin registry, even if it is already
+            loaded
+        collect_plugins:
+          type: boolean
+          default: false
+          description: Collect plugins and add them to the registry
+    PluginSetting:
+      type: object
+      description: Serializer for the PluginSetting model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          readOnly: true
+        value:
+          type: string
+          nullable: true
+        name:
+          type: string
+          readOnly: true
+        description:
+          type: string
+          readOnly: true
+        type:
+          type: string
+          readOnly: true
+        choices:
+          type: array
+          items: {}
+          description: Returns the choices available for a given item.
+          readOnly: true
+        model_name:
+          type: string
+          readOnly: true
+          nullable: true
+        model_filters:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        api_url:
+          type: string
+          readOnly: true
+          nullable: true
+        typ:
+          type: string
+          readOnly: true
+        required:
+          type: boolean
+          readOnly: true
+        plugin:
+          type: string
+          readOnly: true
+      required:
+      - choices
+      - description
+      - key
+      - model_filters
+      - name
+      - pk
+      - plugin
+      - required
+      - typ
+      - type
+      - value
+    PluginUIFeature:
+      type: object
+      description: Serializer for a plugin ui feature.
+      properties:
+        plugin_name:
+          type: string
+        feature_type:
+          type: string
+        key:
+          type: string
+          title: Feature Label
+        title:
+          type: string
+          title: Feature Title
+        description:
+          type: string
+          title: Feature Description
+        icon:
+          type: string
+          title: Feature Icon
+        options:
+          type: object
+          additionalProperties: {}
+          title: Feature Options
+        context:
+          type: object
+          additionalProperties: {}
+          title: Feature Context
+        source:
+          type: string
+          title: Feature Source (javascript)
+      required:
+      - feature_type
+      - key
+      - plugin_name
+    PluginUninstall:
+      type: object
+      description: Serializer for uninstalling a plugin.
+      properties:
+        delete_config:
+          type: boolean
+          default: true
+          title: Delete configuration
+          description: Delete the plugin configuration from the database
+    ProjectCode:
+      type: object
+      description: Serializer for the ProjectCode model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        code:
+          type: string
+          title: Project Code
+          description: Unique project code
+          maxLength: 50
+        description:
+          type: string
+          description: Project description
+          maxLength: 200
+        responsible:
+          type: integer
+          nullable: true
+          description: User or group responsible for this project
+        responsible_detail:
+          allOf:
+          - $ref: '#/components/schemas/Owner'
+          readOnly: true
+          nullable: true
+      required:
+      - code
+      - pk
+    PurchaseOrder:
+      type: object
+      description: Serializer for a PurchaseOrder object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        created_by:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+        creation_date:
+          type: string
+          format: date
+          nullable: true
+        issue_date:
+          type: string
+          format: date
+          readOnly: true
+          nullable: true
+          description: Date order was issued
+        start_date:
+          type: string
+          format: date
+          nullable: true
+          description: Scheduled start date for this order
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          description: Expected date for order delivery. Order will be overdue after
+            this date.
+        description:
+          type: string
+          description: Order description (optional)
+          maxLength: 250
+        line_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        completed_lines:
+          type: integer
+          readOnly: true
+          nullable: true
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        project_code:
+          type: integer
+          nullable: true
+          description: Select project code for this order
+        project_code_label:
+          type: string
+          readOnly: true
+          nullable: true
+        project_code_detail:
+          allOf:
+          - $ref: '#/components/schemas/ProjectCode'
+          readOnly: true
+          nullable: true
+        reference:
+          type: string
+        responsible:
+          type: integer
+          nullable: true
+          description: User or group responsible for this order
+        responsible_detail:
+          allOf:
+          - $ref: '#/components/schemas/Owner'
+          readOnly: true
+          nullable: true
+        contact:
+          type: integer
+          nullable: true
+          description: Point of contact for this order
+        contact_detail:
+          allOf:
+          - $ref: '#/components/schemas/Contact'
+          readOnly: true
+          nullable: true
+        address:
+          type: integer
+          nullable: true
+          description: Company address for this order
+        address_detail:
+          allOf:
+          - $ref: '#/components/schemas/AddressBrief'
+          readOnly: true
+          nullable: true
+        status:
+          type: integer
+          readOnly: true
+          title: Order Status
+        status_text:
+          type: string
+          readOnly: true
+        status_custom_key:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Custom status key
+          description: |-
+            Additional status information for this item
+
+            * `10` - Pending
+            * `20` - Placed
+            * `25` - On Hold
+            * `30` - Complete
+            * `40` - Cancelled
+            * `50` - Lost
+            * `60` - Returned
+
+            Additional custom status keys may be retrieved from the corresponding 'status_retrieve' call.
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        barcode_hash:
+          type: string
+          readOnly: true
+        overdue:
+          type: boolean
+          readOnly: true
+          nullable: true
+        duplicate:
+          allOf:
+          - $ref: '#/components/schemas/DuplicateOrder'
+          writeOnly: true
+          title: Duplicate Order
+          description: Specify options for duplicating this order
+        complete_date:
+          type: string
+          format: date
+          readOnly: true
+          nullable: true
+          title: Completion Date
+          description: Date order was completed
+        supplier:
+          type: integer
+          nullable: true
+          description: Company from which the items are being ordered
+        supplier_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        supplier_reference:
+          type: string
+          description: Supplier order reference code
+          maxLength: 64
+        supplier_name:
+          type: string
+          readOnly: true
+        total_price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        order_currency:
+          type: string
+          nullable: true
+          description: |-
+            Currency for this order (leave blank to use company default)
+
+            * `` - ---------
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        destination:
+          type: integer
+          nullable: true
+          description: Destination for received items
+      required:
+      - barcode_hash
+      - created_by
+      - pk
+      - reference
+      - status
+      - status_text
+      - supplier
+      - supplier_name
+    PurchaseOrderComplete:
+      type: object
+      description: Serializer for completing a purchase order.
+      properties:
+        accept_incomplete:
+          type: boolean
+          default: false
+          description: Allow order to be closed with incomplete line items
+    PurchaseOrderExtraLine:
+      type: object
+      description: Serializer for a PurchaseOrderExtraLine object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        description:
+          type: string
+          description: Line item description (optional)
+          maxLength: 250
+        quantity:
+          type: number
+          format: double
+        reference:
+          type: string
+          description: Line item reference
+          maxLength: 100
+        notes:
+          type: string
+          description: Line item notes
+          maxLength: 500
+        context:
+          nullable: true
+          description: Additional context for this line
+        order:
+          type: integer
+          description: Purchase Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/PurchaseOrder'
+          readOnly: true
+          nullable: true
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+      required:
+      - order
+      - pk
+      - quantity
+    PurchaseOrderLineItem:
+      type: object
+      description: Serializer class for the PurchaseOrderLineItem model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+          nullable: true
+          title: Supplier Part
+        quantity:
+          type: number
+          format: double
+          minimum: 0
+        reference:
+          type: string
+          description: Line item reference
+          maxLength: 100
+        notes:
+          type: string
+          description: Line item notes
+          maxLength: 500
+        order:
+          type: integer
+          description: Purchase Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/PurchaseOrder'
+          readOnly: true
+          nullable: true
+        overdue:
+          type: boolean
+          readOnly: true
+          nullable: true
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+        supplier_part_detail:
+          allOf:
+          - $ref: '#/components/schemas/SupplierPart'
+          readOnly: true
+          nullable: true
+        received:
+          type: number
+          format: double
+          readOnly: true
+          default: 0.0
+        purchase_price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        purchase_price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Purchase price currency
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        auto_pricing:
+          type: boolean
+          default: true
+          description: Automatically calculate purchase price based on supplier part
+            data
+        destination:
+          type: integer
+          nullable: true
+          description: Destination for received items
+        destination_detail:
+          allOf:
+          - $ref: '#/components/schemas/LocationBrief'
+          readOnly: true
+          nullable: true
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          description: Target date for this line item (leave blank to use the target
+            date from the order)
+        total_price:
+          type: number
+          format: double
+          readOnly: true
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        merge_items:
+          type: boolean
+          writeOnly: true
+          default: true
+          description: Merge items with the same part, destination and target date
+            into one line item
+        sku:
+          type: string
+          readOnly: true
+          nullable: true
+        mpn:
+          type: string
+          readOnly: true
+          nullable: true
+        ipn:
+          type: string
+          readOnly: true
+          nullable: true
+          title: Internal Part Number
+        internal_part:
+          type: integer
+          readOnly: true
+        internal_part_name:
+          type: string
+          readOnly: true
+      required:
+      - internal_part
+      - internal_part_name
+      - order
+      - part
+      - pk
+      - quantity
+      - received
+      - total_price
+    PurchaseOrderLineItemReceive:
+      type: object
+      description: A serializer for receiving a single purchase order line item against
+        a purchase order.
+      properties:
+        line_item:
+          type: integer
+        location:
+          type: integer
+          nullable: true
+          description: Select destination location for received items
+        quantity:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,10}(?:\.\d{0,5})?$
+        batch_code:
+          type: string
+          default: ''
+          description: Enter batch code for incoming stock items
+        expiry_date:
+          type: string
+          format: date
+          nullable: true
+          description: Enter expiry date for incoming stock items
+        serial_numbers:
+          type: string
+          default: ''
+          description: Enter serial numbers for incoming stock items
+        status:
+          type: integer
+          description: |-
+            Stock item status code
+
+            * `10` - OK
+            * `50` - Attention needed
+            * `55` - Damaged
+            * `60` - Destroyed
+            * `65` - Rejected
+            * `70` - Lost
+            * `75` - Quarantined
+            * `85` - Returned
+
+            Additional custom status keys may be retrieved from the 'stock_status_retrieve' call.
+          default: 10
+        packaging:
+          type: string
+          default: ''
+          description: Override packaging information for incoming stock items
+        note:
+          type: string
+          default: ''
+          description: Additional note for incoming stock items
+        barcode:
+          type: string
+          nullable: true
+          default: ''
+          description: Scanned barcode
+      required:
+      - line_item
+      - quantity
+    PurchaseOrderReceive:
+      type: object
+      description: Serializer for receiving items against a PurchaseOrder.
+      properties:
+        items:
+          type: array
+          items:
+            $ref: '#/components/schemas/PurchaseOrderLineItemReceive'
+        location:
+          type: integer
+          nullable: true
+          description: Select destination location for received items
+      required:
+      - items
+    ReferenceStatusEnum:
+      enum:
+      - BuildStatus
+      - DataImportStatusCode
+      - LabelPrinterStatus
+      - MachineStatus
+      - PurchaseOrderStatus
+      - ReturnOrderLineStatus
+      - ReturnOrderStatus
+      - SalesOrderStatus
+      - StockHistoryCode
+      - StockStatus
+      type: string
+      description: |-
+        * `BuildStatus` - BuildStatus
+        * `DataImportStatusCode` - DataImportStatusCode
+        * `LabelPrinterStatus` - LabelPrinterStatus
+        * `MachineStatus` - MachineStatus
+        * `PurchaseOrderStatus` - PurchaseOrderStatus
+        * `ReturnOrderLineStatus` - ReturnOrderLineStatus
+        * `ReturnOrderStatus` - ReturnOrderStatus
+        * `SalesOrderStatus` - SalesOrderStatus
+        * `StockHistoryCode` - StockHistoryCode
+        * `StockStatus` - StockStatus
+    ReportAsset:
+      type: object
+      description: Serializer class for the ReportAsset model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        asset:
+          type: string
+          format: uri
+        description:
+          type: string
+          description: Asset file description
+          maxLength: 250
+      required:
+      - asset
+      - description
+      - pk
+    ReportPrint:
+      type: object
+      description: Serializer class for printing a report.
+      properties:
+        template:
+          type: integer
+          description: Select report template
+        items:
+          type: array
+          items:
+            type: integer
+          description: List of item primary keys to include in the report
+      required:
+      - items
+      - template
+    ReportSnippet:
+      type: object
+      description: Serializer class for the ReportSnippet model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        snippet:
+          type: string
+          format: uri
+        description:
+          type: string
+          description: Snippet file description
+          maxLength: 250
+      required:
+      - description
+      - pk
+      - snippet
+    ReportTemplate:
+      type: object
+      description: Serializer class for report template model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Template name
+          maxLength: 100
+        description:
+          type: string
+          description: Template description
+          maxLength: 250
+        model_type:
+          $ref: '#/components/schemas/TemplateModelTypeEnum'
+        template:
+          type: string
+          format: uri
+        filters:
+          type: string
+          description: Template query filters (comma-separated list of key=value pairs)
+          maxLength: 250
+        filename_pattern:
+          type: string
+          description: Pattern for generating filenames
+          maxLength: 100
+        enabled:
+          type: boolean
+          description: Template is enabled
+        revision:
+          type: integer
+          readOnly: true
+        attach_to_model:
+          type: boolean
+          title: Attach to Model on Print
+          description: Save report output as an attachment against linked model instance
+            when printing
+        page_size:
+          allOf:
+          - $ref: '#/components/schemas/PageSizeEnum'
+          default: A4
+        landscape:
+          type: boolean
+          description: Render report in landscape orientation
+      required:
+      - description
+      - model_type
+      - name
+      - pk
+      - revision
+      - template
+    ReturnOrder:
+      type: object
+      description: Serializer for the ReturnOrder model class.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        created_by:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+        creation_date:
+          type: string
+          format: date
+          nullable: true
+        issue_date:
+          type: string
+          format: date
+          nullable: true
+          description: Date order was issued
+        start_date:
+          type: string
+          format: date
+          nullable: true
+          description: Scheduled start date for this order
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          description: Expected date for order delivery. Order will be overdue after
+            this date.
+        description:
+          type: string
+          description: Order description (optional)
+          maxLength: 250
+        line_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        completed_lines:
+          type: integer
+          readOnly: true
+          nullable: true
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        project_code:
+          type: integer
+          nullable: true
+          description: Select project code for this order
+        project_code_label:
+          type: string
+          readOnly: true
+          nullable: true
+        project_code_detail:
+          allOf:
+          - $ref: '#/components/schemas/ProjectCode'
+          readOnly: true
+          nullable: true
+        reference:
+          type: string
+        responsible:
+          type: integer
+          nullable: true
+          description: User or group responsible for this order
+        responsible_detail:
+          allOf:
+          - $ref: '#/components/schemas/Owner'
+          readOnly: true
+          nullable: true
+        contact:
+          type: integer
+          nullable: true
+          description: Point of contact for this order
+        contact_detail:
+          allOf:
+          - $ref: '#/components/schemas/Contact'
+          readOnly: true
+          nullable: true
+        address:
+          type: integer
+          nullable: true
+          description: Company address for this order
+        address_detail:
+          allOf:
+          - $ref: '#/components/schemas/AddressBrief'
+          readOnly: true
+          nullable: true
+        status:
+          type: integer
+          readOnly: true
+          title: Order Status
+        status_text:
+          type: string
+          readOnly: true
+        status_custom_key:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Custom status key
+          description: |-
+            Additional status information for this item
+
+            * `10` - Pending
+            * `20` - In Progress
+            * `25` - On Hold
+            * `30` - Complete
+            * `40` - Cancelled
+
+            Additional custom status keys may be retrieved from the corresponding 'status_retrieve' call.
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        barcode_hash:
+          type: string
+          readOnly: true
+        overdue:
+          type: boolean
+          readOnly: true
+          nullable: true
+        duplicate:
+          allOf:
+          - $ref: '#/components/schemas/DuplicateOrder'
+          writeOnly: true
+          title: Duplicate Order
+          description: Specify options for duplicating this order
+        complete_date:
+          type: string
+          format: date
+          nullable: true
+          title: Completion Date
+          description: Date order was completed
+        customer:
+          type: integer
+          nullable: true
+          description: Company from which items are being returned
+        customer_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        customer_reference:
+          type: string
+          description: Customer order reference code
+          maxLength: 64
+        order_currency:
+          type: string
+          nullable: true
+          description: |-
+            Currency for this order (leave blank to use company default)
+
+            * `` - ---------
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        total_price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+      required:
+      - barcode_hash
+      - created_by
+      - pk
+      - reference
+      - status
+      - status_text
+    ReturnOrderExtraLine:
+      type: object
+      description: Serializer for a ReturnOrderExtraLine object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        description:
+          type: string
+          description: Line item description (optional)
+          maxLength: 250
+        quantity:
+          type: number
+          format: double
+        reference:
+          type: string
+          description: Line item reference
+          maxLength: 100
+        notes:
+          type: string
+          description: Line item notes
+          maxLength: 500
+        context:
+          nullable: true
+          description: Additional context for this line
+        order:
+          type: integer
+          description: Return Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/ReturnOrder'
+          readOnly: true
+          nullable: true
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+      required:
+      - order
+      - pk
+      - quantity
+    ReturnOrderLineItem:
+      type: object
+      description: Serializer for a ReturnOrderLineItem object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        order:
+          type: integer
+          description: Return Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/ReturnOrder'
+          readOnly: true
+          nullable: true
+        item:
+          type: integer
+          description: Select item to return from customer
+        item_detail:
+          allOf:
+          - $ref: '#/components/schemas/StockItem'
+          readOnly: true
+          nullable: true
+        quantity:
+          type: number
+          format: double
+          description: Quantity to return
+        received_date:
+          type: string
+          format: date
+          nullable: true
+          description: The date this this return item was received
+        outcome:
+          allOf:
+          - $ref: '#/components/schemas/OutcomeEnum'
+          description: |-
+            Outcome for this line item
+
+            * `10` - Pending
+            * `20` - Return
+            * `30` - Repair
+            * `40` - Replace
+            * `50` - Refund
+            * `60` - Reject
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Line price currency
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        reference:
+          type: string
+          description: Line item reference
+          maxLength: 100
+        notes:
+          type: string
+          description: Line item notes
+          maxLength: 500
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          description: Target date for this line item (leave blank to use the target
+            date from the order)
+      required:
+      - item
+      - order
+      - pk
+      - quantity
+    ReturnOrderLineItemReceive:
+      type: object
+      description: Serializer for receiving a single line item against a ReturnOrder.
+      properties:
+        item:
+          type: integer
+          title: Return order line item
+        status:
+          type: integer
+          description: |-
+            Stock item status code
+
+            * `10` - OK
+            * `50` - Attention needed
+            * `55` - Damaged
+            * `60` - Destroyed
+            * `65` - Rejected
+            * `70` - Lost
+            * `75` - Quarantined
+            * `85` - Returned
+
+            Additional custom status keys may be retrieved from the 'stock_status_retrieve' call.
+      required:
+      - item
+    ReturnOrderReceive:
+      type: object
+      description: Serializer for receiving items against a ReturnOrder.
+      properties:
+        items:
+          type: array
+          items:
+            $ref: '#/components/schemas/ReturnOrderLineItemReceive'
+        location:
+          type: integer
+          description: Select destination location for received items
+        note:
+          type: string
+          default: ''
+          description: Additional note for incoming stock items
+      required:
+      - items
+      - location
+    ReturnStockItem:
+      type: object
+      description: DRF serializer for returning a stock item from a customer.
+      properties:
+        location:
+          type: integer
+          description: Destination location for returned item
+        status:
+          type: integer
+          description: |-
+            Stock item status code
+
+            * `10` - OK
+            * `50` - Attention needed
+            * `55` - Damaged
+            * `60` - Destroyed
+            * `65` - Rejected
+            * `70` - Lost
+            * `75` - Quarantined
+            * `85` - Returned
+
+            Additional custom status keys may be retrieved from the 'stock_status_retrieve' call.
+        notes:
+          type: string
+          description: Add transaction note (optional)
+      required:
+      - location
+    Role:
+      type: object
+      description: Serializer for a roles associated with a given user.
+      properties:
+        user:
+          type: integer
+        username:
+          type: string
+          description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
+            only.
+          pattern: ^[\w.@+-]+$
+          maxLength: 150
+        roles:
+          type: object
+          additionalProperties: {}
+          description: Roles associated with the user.
+          readOnly: true
+        permissions:
+          type: object
+          additionalProperties: {}
+          description: Permissions associated with the user.
+          readOnly: true
+          nullable: true
+        is_staff:
+          type: boolean
+          title: Staff status
+          description: Designates whether the user can log into this admin site.
+        is_superuser:
+          type: boolean
+          title: Superuser status
+          description: Designates that this user has all permissions without explicitly
+            assigning them.
+      required:
+      - roles
+      - user
+      - username
+    RuleSet:
+      type: object
+      description: Serializer for a RuleSet.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          allOf:
+          - $ref: '#/components/schemas/NameEnum'
+          readOnly: true
+          description: |-
+            Permission set
+
+            * `admin` - Admin
+            * `part_category` - Part Categories
+            * `part` - Parts
+            * `stocktake` - Stocktake
+            * `stock_location` - Stock Locations
+            * `stock` - Stock Items
+            * `build` - Build Orders
+            * `purchase_order` - Purchase Orders
+            * `sales_order` - Sales Orders
+            * `return_order` - Return Orders
+        label:
+          type: string
+          description: Return the translated label for this ruleset.
+          readOnly: true
+        group:
+          type: integer
+          readOnly: true
+          description: Group
+        can_view:
+          type: boolean
+          title: View
+          description: Permission to view items
+        can_add:
+          type: boolean
+          title: Add
+          description: Permission to add items
+        can_change:
+          type: boolean
+          title: Change
+          description: Permissions to edit items
+        can_delete:
+          type: boolean
+          title: Delete
+          description: Permission to delete items
+      required:
+      - group
+      - label
+      - name
+      - pk
+    SalesOrder:
+      type: object
+      description: Serializer for the SalesOrder model class.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        created_by:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+        creation_date:
+          type: string
+          format: date
+          nullable: true
+        issue_date:
+          type: string
+          format: date
+          nullable: true
+          description: Date order was issued
+        start_date:
+          type: string
+          format: date
+          nullable: true
+          description: Scheduled start date for this order
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          description: Expected date for order delivery. Order will be overdue after
+            this date.
+        description:
+          type: string
+          description: Order description (optional)
+          maxLength: 250
+        line_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        completed_lines:
+          type: integer
+          readOnly: true
+          nullable: true
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        project_code:
+          type: integer
+          nullable: true
+          description: Select project code for this order
+        project_code_label:
+          type: string
+          readOnly: true
+          nullable: true
+        project_code_detail:
+          allOf:
+          - $ref: '#/components/schemas/ProjectCode'
+          readOnly: true
+          nullable: true
+        reference:
+          type: string
+        responsible:
+          type: integer
+          nullable: true
+          description: User or group responsible for this order
+        responsible_detail:
+          allOf:
+          - $ref: '#/components/schemas/Owner'
+          readOnly: true
+          nullable: true
+        contact:
+          type: integer
+          nullable: true
+          description: Point of contact for this order
+        contact_detail:
+          allOf:
+          - $ref: '#/components/schemas/Contact'
+          readOnly: true
+          nullable: true
+        address:
+          type: integer
+          nullable: true
+          description: Company address for this order
+        address_detail:
+          allOf:
+          - $ref: '#/components/schemas/AddressBrief'
+          readOnly: true
+          nullable: true
+        status:
+          type: integer
+          readOnly: true
+          title: Order Status
+        status_text:
+          type: string
+          readOnly: true
+        status_custom_key:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Custom status key
+          description: |-
+            Additional status information for this item
+
+            * `10` - Pending
+            * `15` - In Progress
+            * `20` - Shipped
+            * `25` - On Hold
+            * `30` - Complete
+            * `40` - Cancelled
+            * `50` - Lost
+            * `60` - Returned
+
+            Additional custom status keys may be retrieved from the corresponding 'status_retrieve' call.
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        barcode_hash:
+          type: string
+          readOnly: true
+        overdue:
+          type: boolean
+          readOnly: true
+          nullable: true
+        duplicate:
+          allOf:
+          - $ref: '#/components/schemas/DuplicateOrder'
+          writeOnly: true
+          title: Duplicate Order
+          description: Specify options for duplicating this order
+        customer:
+          type: integer
+          nullable: true
+          description: Company to which the items are being sold
+        customer_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        customer_reference:
+          type: string
+          description: Customer order reference code
+          maxLength: 64
+        shipment_date:
+          type: string
+          format: date
+          readOnly: true
+          nullable: true
+        total_price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          readOnly: true
+          nullable: true
+        order_currency:
+          type: string
+          nullable: true
+          description: |-
+            Currency for this order (leave blank to use company default)
+
+            * `` - ---------
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        shipments_count:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Shipments
+        completed_shipments_count:
+          type: integer
+          readOnly: true
+          nullable: true
+          title: Completed Shipments
+      required:
+      - barcode_hash
+      - created_by
+      - pk
+      - reference
+      - status
+      - status_text
+    SalesOrderAllocation:
+      type: object
+      description: |-
+        Serializer for the SalesOrderAllocation model.
+
+        This includes some fields from the related model objects.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        item:
+          type: integer
+          description: Select stock item to allocate
+        quantity:
+          type: number
+          format: double
+        shipment:
+          type: integer
+          nullable: true
+          description: Sales order shipment reference
+        line:
+          type: integer
+          readOnly: true
+        part:
+          type: integer
+          readOnly: true
+        order:
+          type: integer
+          readOnly: true
+        serial:
+          type: string
+          readOnly: true
+          nullable: true
+        location:
+          type: integer
+          readOnly: true
+        item_detail:
+          allOf:
+          - $ref: '#/components/schemas/StockItemSerializerBrief'
+          readOnly: true
+          nullable: true
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/SalesOrder'
+          readOnly: true
+          nullable: true
+        customer_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        location_detail:
+          allOf:
+          - $ref: '#/components/schemas/LocationBrief'
+          readOnly: true
+          nullable: true
+        shipment_detail:
+          allOf:
+          - $ref: '#/components/schemas/SalesOrderShipment'
+          readOnly: true
+      required:
+      - item
+      - line
+      - location
+      - order
+      - part
+      - pk
+      - quantity
+      - shipment_detail
+    SalesOrderComplete:
+      type: object
+      description: DRF serializer for manually marking a sales order as complete.
+      properties:
+        accept_incomplete:
+          type: boolean
+          default: false
+          description: Allow order to be closed with incomplete line items
+    SalesOrderExtraLine:
+      type: object
+      description: Serializer for a SalesOrderExtraLine object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        description:
+          type: string
+          description: Line item description (optional)
+          maxLength: 250
+        quantity:
+          type: number
+          format: double
+        reference:
+          type: string
+          description: Line item reference
+          maxLength: 100
+        notes:
+          type: string
+          description: Line item notes
+          maxLength: 500
+        context:
+          nullable: true
+          description: Additional context for this line
+        order:
+          type: integer
+          description: Sales Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/SalesOrder'
+          readOnly: true
+          nullable: true
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+      required:
+      - order
+      - pk
+      - quantity
+    SalesOrderLineItem:
+      type: object
+      description: Serializer for a SalesOrderLineItem object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        allocated:
+          type: number
+          format: double
+          readOnly: true
+        customer_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        quantity:
+          type: number
+          format: double
+        reference:
+          type: string
+          description: Line item reference
+          maxLength: 100
+        notes:
+          type: string
+          description: Line item notes
+          maxLength: 500
+        order:
+          type: integer
+          description: Sales Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/SalesOrder'
+          readOnly: true
+          nullable: true
+        overdue:
+          type: boolean
+          readOnly: true
+          nullable: true
+        part:
+          type: integer
+          nullable: true
+          description: Part
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+        sale_price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        sale_price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Sale price currency
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        shipped:
+          type: number
+          format: double
+          readOnly: true
+        target_date:
+          type: string
+          format: date
+          nullable: true
+          description: Target date for this line item (leave blank to use the target
+            date from the order)
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        available_stock:
+          type: number
+          format: double
+          readOnly: true
+        available_variant_stock:
+          type: number
+          format: double
+          readOnly: true
+        building:
+          type: number
+          format: double
+          readOnly: true
+          title: In Production
+        on_order:
+          type: number
+          format: double
+          readOnly: true
+      required:
+      - allocated
+      - available_stock
+      - available_variant_stock
+      - building
+      - on_order
+      - order
+      - pk
+      - quantity
+      - shipped
+    SalesOrderSerialAllocation:
+      type: object
+      description: DRF serializer for allocation of serial numbers against a sales
+        order / shipment.
+      properties:
+        line_item:
+          type: integer
+        quantity:
+          type: integer
+          minimum: 1
+        serial_numbers:
+          type: string
+          description: Enter serial numbers to allocate
+        shipment:
+          type: integer
+          nullable: true
+      required:
+      - line_item
+      - quantity
+      - serial_numbers
+    SalesOrderShipment:
+      type: object
+      description: Serializer for the SalesOrderShipment class.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        order:
+          type: integer
+          description: Sales Order
+        order_detail:
+          allOf:
+          - $ref: '#/components/schemas/SalesOrder'
+          readOnly: true
+          nullable: true
+        allocated_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        shipment_date:
+          type: string
+          format: date
+          nullable: true
+          description: Date of shipment
+        delivery_date:
+          type: string
+          format: date
+          nullable: true
+          description: Date of delivery of shipment
+        checked_by:
+          type: integer
+          nullable: true
+          description: User who checked this shipment
+        reference:
+          type: string
+          default: '1'
+          title: Shipment
+          description: Shipment number
+          maxLength: 100
+        tracking_number:
+          type: string
+          description: Shipment tracking information
+          maxLength: 100
+        invoice_number:
+          type: string
+          description: Reference number for associated invoice
+          maxLength: 100
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+      required:
+      - order
+      - pk
+    SalesOrderShipmentAllocation:
+      type: object
+      description: DRF serializer for allocation of stock items against a sales order
+        / shipment.
+      properties:
+        items:
+          type: array
+          items:
+            $ref: '#/components/schemas/SalesOrderShipmentAllocationItem'
+        shipment:
+          type: integer
+          nullable: true
+      required:
+      - items
+    SalesOrderShipmentAllocationItem:
+      type: object
+      description: A serializer for allocating a single stock-item against a SalesOrder
+        shipment.
+      properties:
+        line_item:
+          type: integer
+          title: Stock Item
+        stock_item:
+          type: integer
+        quantity:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,10}(?:\.\d{0,5})?$
+      required:
+      - line_item
+      - quantity
+      - stock_item
+    SalesOrderShipmentComplete:
+      type: object
+      description: Serializer for completing (shipping) a SalesOrderShipment.
+      properties:
+        shipment_date:
+          type: string
+          format: date
+          nullable: true
+          description: Date of shipment
+        delivery_date:
+          type: string
+          format: date
+          nullable: true
+          description: Date of delivery of shipment
+        tracking_number:
+          type: string
+          description: Shipment tracking information
+          maxLength: 100
+        invoice_number:
+          type: string
+          description: Reference number for associated invoice
+          maxLength: 100
+        link:
+          type: string
+          format: uri
+          description: Link to external page
+          maxLength: 2000
+    ScheduleTypeEnum:
+      enum:
+      - O
+      - I
+      - H
+      - D
+      - W
+      - BW
+      - M
+      - BM
+      - Q
+      - Y
+      - C
+      type: string
+      description: |-
+        * `O` - Once
+        * `I` - Minutes
+        * `H` - Hourly
+        * `D` - Daily
+        * `W` - Weekly
+        * `BW` - Biweekly
+        * `M` - Monthly
+        * `BM` - Bimonthly
+        * `Q` - Quarterly
+        * `Y` - Yearly
+        * `C` - Cron
+    ScheduledTask:
+      type: object
+      description: Serializer for an individual scheduled task object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          nullable: true
+          maxLength: 100
+        func:
+          type: string
+          description: e.g. module.tasks.function
+          maxLength: 256
+        args:
+          type: string
+          nullable: true
+          description: e.g. 1, 2, 'John'
+        kwargs:
+          type: string
+          nullable: true
+          description: e.g. x=1, y=2, name='John'
+        schedule_type:
+          $ref: '#/components/schemas/ScheduleTypeEnum'
+        repeats:
+          type: integer
+          description: n = n times, -1 = forever
+        last_run:
+          type: string
+          format: date-time
+        next_run:
+          type: string
+          format: date-time
+          nullable: true
+        success:
+          type: boolean
+        task:
+          type: string
+          readOnly: true
+          nullable: true
+      required:
+      - func
+      - last_run
+      - pk
+      - success
+    SelectionEntry:
+      type: object
+      description: Serializer for a selection entry.
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        value:
+          type: string
+          description: Value of the selection list entry
+          maxLength: 255
+        label:
+          type: string
+          description: Label for the selection list entry
+          maxLength: 255
+        description:
+          type: string
+          description: Description of the selection list entry
+          maxLength: 250
+        active:
+          type: boolean
+          description: Is this selection list entry active?
+        list:
+          type: integer
+          nullable: true
+          title: Selection List
+          description: Selection list to which this entry belongs
+      required:
+      - id
+      - label
+      - value
+    SelectionList:
+      type: object
+      description: Serializer for a selection list.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Name of the selection list
+          maxLength: 100
+        description:
+          type: string
+          description: Description of the selection list
+          maxLength: 250
+        active:
+          type: boolean
+          description: Can this selection list be used?
+        locked:
+          type: boolean
+          description: Is this selection list locked?
+        source_plugin:
+          type: integer
+          nullable: true
+          description: Plugin which provides the selection list
+        source_string:
+          type: string
+          description: Optional string identifying the source used for this list
+          maxLength: 1000
+        default:
+          allOf:
+          - $ref: '#/components/schemas/SelectionEntry'
+          readOnly: true
+        created:
+          type: string
+          format: date-time
+          readOnly: true
+          description: Date and time that the selection list was created
+        last_updated:
+          type: string
+          format: date-time
+          readOnly: true
+          description: Date and time that the selection list was last updated
+        choices:
+          type: array
+          items:
+            $ref: '#/components/schemas/SelectionEntry'
+        entry_count:
+          type: integer
+          readOnly: true
+      required:
+      - created
+      - default
+      - entry_count
+      - last_updated
+      - name
+      - pk
+    SerializeStockItem:
+      type: object
+      description: |-
+        A DRF serializer for "serializing" a StockItem.
+
+        (Sorry for the confusing naming...)
+
+        Here, "serializing" means splitting out a single StockItem,
+        into multiple single-quantity items with an assigned serial number
+
+        Note: The base StockItem object is provided to the serializer context
+      properties:
+        quantity:
+          type: integer
+          minimum: 0
+          description: Enter number of stock items to serialize
+        serial_numbers:
+          type: string
+          description: Enter serial numbers for new items
+        destination:
+          type: integer
+          title: Location
+          description: Destination stock location
+        notes:
+          type: string
+          description: Optional note field
+      required:
+      - destination
+      - quantity
+      - serial_numbers
+    Settings:
+      type: object
+      description: Serializer for InfoApiSerializer.
+      properties:
+        sso_registration:
+          type: boolean
+        registration_enabled:
+          type: boolean
+        password_forgotten_enabled:
+          type: boolean
+      required:
+      - password_forgotten_enabled
+      - registration_enabled
+      - sso_registration
+    StockAdd:
+      type: object
+      description: Serializer for adding stock to stock item(s).
+      properties:
+        items:
+          type: array
+          items:
+            $ref: '#/components/schemas/StockAdjustmentItem'
+        notes:
+          type: string
+          description: Stock transaction notes
+      required:
+      - items
+    StockAdjustmentItem:
+      type: object
+      description: |-
+        Serializer for a single StockItem within a stock adjustment request.
+
+        Required Fields:
+            - item: StockItem object
+            - quantity: Numerical quantity
+
+        Optional Fields (may be used by external tools)
+            - status: Change StockItem status code
+            - packaging: Change StockItem packaging
+            - batch: Change StockItem batch code
+
+        The optional fields can be used to adjust values for individual stock items
+      properties:
+        pk:
+          type: integer
+          title: stock_item
+          description: StockItem primary key value
+        quantity:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,10}(?:\.\d{0,5})?$
+        batch:
+          type: string
+          title: Batch Code
+          description: Batch code for this stock item
+          maxLength: 100
+        status:
+          type: integer
+          description: |-
+            Stock item status code
+
+            * `None` - No Change
+            * `10` - OK
+            * `50` - Attention needed
+            * `55` - Damaged
+            * `60` - Destroyed
+            * `65` - Rejected
+            * `70` - Lost
+            * `75` - Quarantined
+            * `85` - Returned
+
+            Additional custom status keys may be retrieved from the 'stock_status_retrieve' call.
+        packaging:
+          type: string
+          description: Packaging this stock item is stored in
+          maxLength: 50
+      required:
+      - pk
+      - quantity
+    StockAssignment:
+      type: object
+      description: |-
+        Serializer for assigning one (or more) stock items to a customer.
+
+        This is a manual assignment process, separate for (for example) a Sales Order
+      properties:
+        items:
+          type: array
+          items:
+            $ref: '#/components/schemas/StockAssignmentItem'
+        customer:
+          type: integer
+          description: Customer to assign stock items
+        notes:
+          type: string
+          description: Stock assignment notes
+      required:
+      - customer
+      - items
+    StockAssignmentItem:
+      type: object
+      description: |-
+        Serializer for a single StockItem with in StockAssignment request.
+
+        Here, the particular StockItem is being assigned (manually) to a customer
+
+        Fields:
+            - item: StockItem object
+      properties:
+        item:
+          type: integer
+          title: Stock Item
+      required:
+      - item
+    StockChangeStatus:
+      type: object
+      description: Serializer for changing status of multiple StockItem objects.
+      properties:
+        items:
+          type: array
+          items:
+            type: integer
+            title: Stock Items
+          title: Stock Items
+          description: Select stock items to change status
+        status:
+          type: integer
+          description: |-
+            Stock item status code
+
+            * `10` - OK
+            * `50` - Attention needed
+            * `55` - Damaged
+            * `60` - Destroyed
+            * `65` - Rejected
+            * `70` - Lost
+            * `75` - Quarantined
+            * `85` - Returned
+
+            Additional custom status keys may be retrieved from the 'stock_status_retrieve' call.
+          default: 10
+        note:
+          type: string
+          title: Notes
+          description: Add transaction note (optional)
+      required:
+      - items
+    StockCount:
+      type: object
+      description: Serializer for counting stock items.
+      properties:
+        items:
+          type: array
+          items:
+            $ref: '#/components/schemas/StockAdjustmentItem'
+        notes:
+          type: string
+          description: Stock transaction notes
+      required:
+      - items
+    StockItem:
+      type: object
+      description: |-
+        Serializer for a StockItem.
+
+        - Includes serialization for the linked part
+        - Includes serialization for the item location
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+          description: Base Part
+        quantity:
+          type: number
+          format: double
+        serial:
+          type: string
+          nullable: true
+          title: Serial Number
+          description: Serial number for this item
+          maxLength: 100
+        batch:
+          type: string
+          nullable: true
+          title: Batch Code
+          description: Batch code for this stock item
+          maxLength: 100
+        location:
+          type: integer
+          nullable: true
+          title: Stock Location
+          description: Where is this stock item located?
+        belongs_to:
+          type: integer
+          nullable: true
+          title: Installed In
+          description: Is this item installed in another item?
+        build:
+          type: integer
+          nullable: true
+          title: Source Build
+          description: Build for this stock item
+        consumed_by:
+          type: integer
+          nullable: true
+          description: Build order which consumed this stock item
+        customer:
+          type: integer
+          nullable: true
+          description: Customer
+        delete_on_deplete:
+          type: boolean
+          description: Delete this Stock Item when stock is depleted
+        expiry_date:
+          type: string
+          format: date
+          nullable: true
+          description: Expiry date for stock item. Stock will be considered expired
+            after this date
+        in_stock:
+          type: boolean
+          readOnly: true
+        is_building:
+          type: boolean
+        link:
+          type: string
+          format: uri
+          title: External Link
+          description: Link to external URL
+          maxLength: 2000
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        owner:
+          type: integer
+          nullable: true
+          description: Select Owner
+        packaging:
+          type: string
+          nullable: true
+          description: Packaging this stock item is stored in
+          maxLength: 50
+        parent:
+          type: integer
+          readOnly: true
+          title: Parent Item
+          description: Parent stock item
+        purchase_order:
+          type: integer
+          nullable: true
+          title: Source Purchase Order
+          description: Purchase order for this stock item
+        purchase_order_reference:
+          type: string
+          readOnly: true
+          nullable: true
+        sales_order:
+          type: integer
+          nullable: true
+          title: Destination Sales Order
+        sales_order_reference:
+          type: string
+          readOnly: true
+          nullable: true
+        status:
+          allOf:
+          - $ref: '#/components/schemas/StockItemStatusEnum'
+          minimum: 0
+        status_text:
+          type: string
+          readOnly: true
+          title: Status
+        status_custom_key:
+          type: integer
+          nullable: true
+          title: Custom status key
+          description: |-
+            Additional status information for this item
+
+            * `10` - OK
+            * `50` - Attention needed
+            * `55` - Damaged
+            * `60` - Destroyed
+            * `65` - Rejected
+            * `70` - Lost
+            * `75` - Quarantined
+            * `85` - Returned
+
+            Additional custom status keys may be retrieved from the corresponding 'status_retrieve' call.
+        supplier_part:
+          type: integer
+          nullable: true
+          description: Select a matching supplier part for this stock item
+        SKU:
+          type: string
+          readOnly: true
+          nullable: true
+          title: Supplier Part Number
+        MPN:
+          type: string
+          readOnly: true
+          nullable: true
+          title: Manufacturer Part Number
+        barcode_hash:
+          type: string
+          readOnly: true
+          description: Unique hash of barcode data
+        updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+          description: Timestamp of last update
+        stocktake_date:
+          type: string
+          format: date
+          readOnly: true
+          nullable: true
+        purchase_price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+          description: Purchase price of this stock item, per unit or pack
+        purchase_price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Purchase currency of this stock item
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        use_pack_size:
+          type: boolean
+          writeOnly: true
+          nullable: true
+          description: 'Use pack size when adding: the quantity defined is the number
+            of packs'
+        tests:
+          type: array
+          items:
+            $ref: '#/components/schemas/StockItemTestResult'
+          readOnly: true
+          nullable: true
+        allocated:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+          title: Allocated Quantity
+        expired:
+          type: boolean
+          readOnly: true
+          nullable: true
+        installed_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        child_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        location_path:
+          type: array
+          items:
+            type: object
+            additionalProperties: {}
+          readOnly: true
+          nullable: true
+        stale:
+          type: boolean
+          readOnly: true
+          nullable: true
+        tracking_items:
+          type: integer
+          readOnly: true
+          nullable: true
+        tags:
+          type: array
+          items:
+            type: string
+        supplier_part_detail:
+          allOf:
+          - $ref: '#/components/schemas/SupplierPart'
+          readOnly: true
+          nullable: true
+          title: Supplier Part
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+          title: Part
+        location_detail:
+          allOf:
+          - $ref: '#/components/schemas/LocationBrief'
+          readOnly: true
+          nullable: true
+          title: Location
+      required:
+      - barcode_hash
+      - in_stock
+      - parent
+      - part
+      - pk
+      - quantity
+      - status_text
+    StockItemSerialNumbers:
+      type: object
+      description: Serializer for extra serial number information about a stock item.
+      properties:
+        next:
+          allOf:
+          - $ref: '#/components/schemas/StockItem'
+          readOnly: true
+          title: Next Serial Number
+        previous:
+          allOf:
+          - $ref: '#/components/schemas/StockItem'
+          readOnly: true
+          title: Previous Serial Number
+      required:
+      - next
+      - previous
+    StockItemSerializerBrief:
+      type: object
+      description: Brief serializers for a StockItem.
+      properties:
+        part:
+          type: integer
+          title: Base Part
+          description: Base part
+        part_name:
+          type: string
+          readOnly: true
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        location:
+          type: integer
+          nullable: true
+          title: Stock Location
+          description: Where is this stock item located?
+        quantity:
+          type: number
+          format: double
+        serial:
+          type: string
+          nullable: true
+          title: Serial Number
+          description: Serial number for this item
+          maxLength: 100
+        batch:
+          type: string
+          nullable: true
+          title: Batch Code
+          description: Batch code for this stock item
+          maxLength: 100
+        supplier_part:
+          type: integer
+          nullable: true
+          description: Select a matching supplier part for this stock item
+        barcode_hash:
+          type: string
+          readOnly: true
+          description: Unique hash of barcode data
+      required:
+      - barcode_hash
+      - part
+      - part_name
+      - pk
+      - quantity
+    StockItemStatusEnum:
+      enum:
+      - 10
+      - 50
+      - 55
+      - 60
+      - 65
+      - 70
+      - 75
+      - 85
+      type: integer
+      description: |-
+        * `10` - OK
+        * `50` - Attention needed
+        * `55` - Damaged
+        * `60` - Destroyed
+        * `65` - Rejected
+        * `70` - Lost
+        * `75` - Quarantined
+        * `85` - Returned
+    StockItemTestResult:
+      type: object
+      description: Serializer for the StockItemTestResult model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        stock_item:
+          type: integer
+        result:
+          type: boolean
+          description: Test result
+        value:
+          type: string
+          description: Test output value
+          maxLength: 500
+        attachment:
+          type: string
+          format: uri
+          nullable: true
+          description: Test result attachment
+        notes:
+          type: string
+          description: Test notes
+          maxLength: 500
+        test_station:
+          type: string
+          description: The identifier of the test station where the test was performed
+          maxLength: 500
+        started_datetime:
+          type: string
+          format: date-time
+          nullable: true
+          title: Started
+          description: The timestamp of the test start
+        finished_datetime:
+          type: string
+          format: date-time
+          nullable: true
+          title: Finished
+          description: The timestamp of the test finish
+        user:
+          type: integer
+          readOnly: true
+          nullable: true
+        user_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+          nullable: true
+        date:
+          type: string
+          format: date-time
+          readOnly: true
+        template:
+          type: integer
+          nullable: true
+          title: Test template for this result
+          description: Template
+        template_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartTestTemplate'
+          readOnly: true
+          nullable: true
+      required:
+      - date
+      - pk
+      - stock_item
+    StockLocationType:
+      type: object
+      description: Serializer for StockLocationType model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        name:
+          type: string
+          description: Name
+          maxLength: 100
+        description:
+          type: string
+          description: Description (optional)
+          maxLength: 250
+        icon:
+          type: string
+          description: Default icon for all locations that have no icon set (optional)
+          maxLength: 100
+        location_count:
+          type: integer
+          readOnly: true
+          nullable: true
+      required:
+      - name
+      - pk
+    StockMerge:
+      type: object
+      description: Serializer for merging two (or more) stock items together.
+      properties:
+        items:
+          type: array
+          items:
+            $ref: '#/components/schemas/StockMergeItem'
+        location:
+          type: integer
+          description: Destination stock location
+        notes:
+          type: string
+          description: Stock merging notes
+        allow_mismatched_suppliers:
+          type: boolean
+          description: Allow stock items with different supplier parts to be merged
+        allow_mismatched_status:
+          type: boolean
+          description: Allow stock items with different status codes to be merged
+      required:
+      - items
+      - location
+    StockMergeItem:
+      type: object
+      description: |-
+        Serializer for a single StockItem within the StockMergeSerializer class.
+
+        Here, the individual StockItem is being checked for merge compatibility.
+      properties:
+        item:
+          type: integer
+          title: Stock Item
+      required:
+      - item
+    StockRemove:
+      type: object
+      description: Serializer for removing stock from stock item(s).
+      properties:
+        items:
+          type: array
+          items:
+            $ref: '#/components/schemas/StockAdjustmentItem'
+        notes:
+          type: string
+          description: Stock transaction notes
+      required:
+      - items
+    StockTracking:
+      type: object
+      description: Serializer for StockItemTracking model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        item:
+          type: integer
+        item_detail:
+          allOf:
+          - $ref: '#/components/schemas/StockItemSerializerBrief'
+          readOnly: true
+          nullable: true
+        date:
+          type: string
+          format: date-time
+          readOnly: true
+        deltas:
+          readOnly: true
+        label:
+          type: string
+          readOnly: true
+        notes:
+          type: string
+          nullable: true
+          description: Entry notes
+          maxLength: 512
+        tracking_type:
+          type: integer
+          readOnly: true
+        user:
+          type: integer
+          readOnly: true
+          nullable: true
+        user_detail:
+          allOf:
+          - $ref: '#/components/schemas/User'
+          readOnly: true
+          nullable: true
+      required:
+      - date
+      - deltas
+      - item
+      - label
+      - pk
+      - tracking_type
+    StockTransfer:
+      type: object
+      description: Serializer for transferring (moving) stock item(s).
+      properties:
+        items:
+          type: array
+          items:
+            $ref: '#/components/schemas/StockAdjustmentItem'
+        notes:
+          type: string
+          description: Stock transaction notes
+        location:
+          type: integer
+          description: Destination stock location
+      required:
+      - items
+      - location
+    SupplierPart:
+      type: object
+      description: Serializer for SupplierPart object.
+      properties:
+        available:
+          type: number
+          format: double
+        availability_updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+          description: Date of last update of availability data
+        description:
+          type: string
+          nullable: true
+          description: Supplier part description
+          maxLength: 250
+        in_stock:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        on_order:
+          type: number
+          format: double
+          readOnly: true
+          nullable: true
+        link:
+          type: string
+          format: uri
+          nullable: true
+          description: URL for external supplier part link
+          maxLength: 2000
+        active:
+          type: boolean
+          description: Is this supplier part active?
+        manufacturer_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+          title: Manufacturer
+        manufacturer_part:
+          type: integer
+          nullable: true
+          description: Select manufacturer part
+        manufacturer_part_detail:
+          allOf:
+          - $ref: '#/components/schemas/ManufacturerPart'
+          readOnly: true
+          nullable: true
+          title: Manufacturer Part
+        MPN:
+          type: string
+          readOnly: true
+          nullable: true
+        note:
+          type: string
+          nullable: true
+          description: Notes
+          maxLength: 100
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        barcode_hash:
+          type: string
+          readOnly: true
+          description: Unique hash of barcode data
+        packaging:
+          type: string
+          nullable: true
+          description: Part packaging
+          maxLength: 50
+        pack_quantity:
+          type: string
+          description: Total quantity supplied in a single pack. Leave empty for single
+            items.
+          maxLength: 25
+        pack_quantity_native:
+          type: number
+          format: double
+          readOnly: true
+        part:
+          type: integer
+          title: Base Part
+          description: Select part
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/PartBrief'
+          readOnly: true
+          nullable: true
+          title: Part
+        pretty_name:
+          type: string
+          readOnly: true
+          nullable: true
+        SKU:
+          type: string
+          description: Supplier stock keeping unit
+          maxLength: 100
+        supplier:
+          type: integer
+        supplier_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+          title: Supplier
+        updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        notes:
+          type: string
+          nullable: true
+          description: Markdown notes (optional)
+          maxLength: 50000
+        tags:
+          type: array
+          items:
+            type: string
+      required:
+      - SKU
+      - barcode_hash
+      - pack_quantity_native
+      - part
+      - pk
+      - supplier
+    SupplierPriceBreak:
+      type: object
+      description: Serializer for SupplierPriceBreak object.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        part:
+          type: integer
+        part_detail:
+          allOf:
+          - $ref: '#/components/schemas/SupplierPart'
+          readOnly: true
+          nullable: true
+        quantity:
+          type: number
+          format: double
+        price:
+          type: string
+          format: decimal
+          pattern: ^-?\d{0,13}(?:\.\d{0,6})?$
+          nullable: true
+        price_currency:
+          type: string
+          title: Currency
+          description: |-
+            Select currency from available options
+
+            * `AUD` - Australian Dollar
+            * `CNY` - Chinese Yuan
+            * `EUR` - Euro
+            * `USD` - US Dollar
+
+            Other valid currencies may be found in the 'CURRENCY_CODES' global setting.
+        supplier:
+          type: integer
+          readOnly: true
+        supplier_detail:
+          allOf:
+          - $ref: '#/components/schemas/CompanyBrief'
+          readOnly: true
+          nullable: true
+        updated:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+          description: Timestamp of last update
+      required:
+      - part
+      - pk
+      - price
+      - quantity
+      - supplier
+    TemplateModelTypeEnum:
+      enum:
+      - build
+      - buildline
+      - purchaseorder
+      - salesorder
+      - salesordershipment
+      - returnorder
+      - part
+      - stockitem
+      - stocklocation
+      type: string
+      description: |-
+        * `build` - Build Order
+        * `buildline` - Build Order Line Item
+        * `purchaseorder` - Purchase Order
+        * `salesorder` - Sales Order
+        * `salesordershipment` - Sales Order Shipment
+        * `returnorder` - Return Order
+        * `part` - Part
+        * `stockitem` - Stock Item
+        * `stocklocation` - Stock Location
+    UnauthorizedStatus:
+      type: integer
+      enum:
+      - 401
+    UninstallStockItem:
+      type: object
+      description: API serializers for uninstalling an installed item from a stock
+        item.
+      properties:
+        location:
+          type: integer
+          description: Destination location for uninstalled item
+        note:
+          type: string
+          title: Notes
+          description: Add transaction note (optional)
+      required:
+      - location
+    Unit:
+      type: object
+      description: Serializer for the AllUnitListResponseSerializer.
+      properties:
+        name:
+          type: string
+        is_alias:
+          type: boolean
+        compatible_units:
+          type: array
+          items:
+            type: string
+        isdimensionless:
+          type: boolean
+      required:
+      - compatible_units
+      - is_alias
+      - isdimensionless
+      - name
+    User:
+      type: object
+      description: Serializer for a User.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        username:
+          type: string
+          description: Username
+        first_name:
+          type: string
+          description: First name of the user
+        last_name:
+          type: string
+          description: Last name of the user
+        email:
+          type: string
+          format: email
+          description: Email address of the user
+      required:
+      - email
+      - first_name
+      - last_name
+      - pk
+      - username
+    UserCreate:
+      type: object
+      description: Serializer for creating a new User.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        username:
+          type: string
+          description: Username
+        first_name:
+          type: string
+          description: First name of the user
+        last_name:
+          type: string
+          description: Last name of the user
+        email:
+          type: string
+          format: email
+          description: Email address of the user
+        groups:
+          type: array
+          items:
+            $ref: '#/components/schemas/Group'
+          readOnly: true
+        group_ids:
+          type: array
+          items:
+            type: integer
+            writeOnly: true
+          writeOnly: true
+        is_staff:
+          type: boolean
+          title: Staff
+          description: Does this user have staff permissions
+        is_superuser:
+          type: boolean
+          title: Superuser
+          description: Is this user a superuser
+        is_active:
+          type: boolean
+          title: Active
+          description: Is this user account active
+        profile:
+          allOf:
+          - $ref: '#/components/schemas/BriefUserProfile'
+          readOnly: true
+      required:
+      - email
+      - first_name
+      - groups
+      - last_name
+      - pk
+      - profile
+      - username
+    UserProfile:
+      type: object
+      description: Serializer for the UserProfile model.
+      properties:
+        language:
+          type: string
+          nullable: true
+          description: Preferred language for the user
+          maxLength: 10
+        theme:
+          nullable: true
+          description: Settings for the web UI as JSON - do not edit manually!
+        widgets:
+          nullable: true
+          description: Settings for the dashboard widgets as JSON - do not edit manually!
+        displayname:
+          type: string
+          nullable: true
+          title: Display Name
+          description: Chosen display name for the user
+          maxLength: 255
+        position:
+          type: string
+          nullable: true
+          description: Main job title or position
+          maxLength: 255
+        status:
+          type: string
+          nullable: true
+          description: User status message
+          maxLength: 2000
+        location:
+          type: string
+          nullable: true
+          description: User location information
+          maxLength: 2000
+        active:
+          type: boolean
+          description: User is actively using the system
+        contact:
+          type: string
+          nullable: true
+          description: Preferred contact information for the user
+          maxLength: 255
+        type:
+          allOf:
+          - $ref: '#/components/schemas/UserTypeEnum'
+          title: User Type
+          description: |-
+            Which type of user is this?
+
+            * `bot` - Bot
+            * `internal` - Internal
+            * `external` - External
+            * `guest` - Guest
+        organisation:
+          type: string
+          nullable: true
+          description: Users primary organisation/affiliation
+          maxLength: 255
+        primary_group:
+          type: integer
+          nullable: true
+          description: Primary group for the user
+    UserSettings:
+      type: object
+      description: Serializer for the InvenTreeUserSetting model.
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        key:
+          type: string
+          readOnly: true
+        value:
+          type: string
+          nullable: true
+        name:
+          type: string
+          readOnly: true
+        description:
+          type: string
+          readOnly: true
+        user:
+          type: integer
+          readOnly: true
+        type:
+          type: string
+          readOnly: true
+        units:
+          type: string
+          readOnly: true
+        choices:
+          type: array
+          items: {}
+          description: Returns the choices available for a given item.
+          readOnly: true
+        model_name:
+          type: string
+          readOnly: true
+          nullable: true
+        api_url:
+          type: string
+          readOnly: true
+          nullable: true
+        typ:
+          type: string
+          readOnly: true
+      required:
+      - choices
+      - description
+      - key
+      - name
+      - pk
+      - typ
+      - type
+      - units
+      - user
+      - value
+    UserTypeEnum:
+      enum:
+      - bot
+      - internal
+      - external
+      - guest
+      type: string
+      description: |-
+        * `bot` - Bot
+        * `internal` - Internal
+        * `external` - External
+        * `guest` - Guest
+    Version:
+      type: object
+      description: Serializer for server version.
+      properties:
+        server:
+          type: string
+        api:
+          type: integer
+        commit_hash:
+          type: string
+        commit_date:
+          type: string
+        commit_branch:
+          type: string
+          nullable: true
+        python:
+          type: string
+        django:
+          type: string
+      required:
+      - api
+      - commit_branch
+      - commit_date
+      - commit_hash
+      - django
+      - python
+      - server
+    VersionInformation:
+      type: object
+      description: Serializer for a single version.
+      properties:
+        version:
+          type: string
+        date:
+          type: string
+          format: date
+        gh:
+          type: string
+          nullable: true
+        text:
+          type: array
+          items:
+            type: string
+        latest:
+          type: boolean
+      required:
+      - date
+      - gh
+      - latest
+      - text
+      - version
+    VersionView:
+      type: object
+      description: Serializer for a single version.
+      properties:
+        dev:
+          type: boolean
+        up_to_date:
+          type: boolean
+        version:
+          $ref: '#/components/schemas/Version'
+        links:
+          $ref: '#/components/schemas/Link'
+      required:
+      - dev
+      - links
+      - up_to_date
+      - version
+    allauth.AccountConfiguration:
+      type: object
+      description: |
+        Configuration of the Django `allauth.account` app.
+      properties:
+        login_methods:
+          type: array
+          items:
+            $ref: '#/components/schemas/LoginMethodsEnum'
+        is_open_for_signup:
+          type: boolean
+        email_verification_by_code_enabled:
+          type: boolean
+        login_by_code_enabled:
+          type: boolean
+      required:
+      - authentication_method
+      - email_verification_by_code_enabled
+      - is_open_for_signup
+      - login_by_code_enabled
+    allauth.Authenticated:
+      type: object
+      properties:
+        user:
+          $ref: '#/components/schemas/allauth.User'
+        methods:
+          type: array
+          description: |
+            A list of methods used to authenticate.
+          items:
+            $ref: '#/components/schemas/allauth.AuthenticationMethod'
+      required:
+      - user
+      - methods
+    allauth.AuthenticatedMeta:
+      allOf:
+      - $ref: '#/components/schemas/allauth.BaseAuthenticationMeta'
+      - type: object
+        description: |
+          Metadata available in an re-authentication related response.
+        properties:
+          is_authenticated:
+            $ref: '#/components/schemas/IsTrueEnum'
+        required:
+        - is_authenticated
+    allauth.AuthenticatedResponse:
+      type: object
+      properties:
+        status:
+          $ref: '#/components/schemas/allauth.StatusOK'
+        data:
+          $ref: '#/components/schemas/allauth.Authenticated'
+        meta:
+          $ref: '#/components/schemas/allauth.AuthenticationMeta'
+      required:
+      - status
+      - data
+      - meta
+    allauth.AuthenticationMeta:
+      allOf:
+      - $ref: '#/components/schemas/allauth.BaseAuthenticationMeta'
+      - type: object
+        description: |
+          Metadata available in an authentication related response.
+        properties:
+          is_authenticated:
+            type: boolean
+        required:
+        - is_authenticated
+    allauth.AuthenticationMethod:
+      oneOf:
+      - type: object
+        title: |
+          Authenticated by username/email login
+        properties:
+          method:
+            $ref: '#/components/schemas/Allauth.AuthenticationMethodMethodEnum'
+          at:
+            $ref: '#/components/schemas/allauth.Timestamp'
+          email:
+            $ref: '#/components/schemas/allauth.Email'
+          username:
+            $ref: '#/components/schemas/allauth.Username'
+        required:
+        - method
+        - at
+      - type: object
+        title: |
+          Reauthenticated by password
+        properties:
+          method:
+            $ref: '#/components/schemas/Allauth.AuthenticationMethodMethodEnum'
+          at:
+            $ref: '#/components/schemas/allauth.Timestamp'
+          reauthenticated:
+            $ref: '#/components/schemas/IsTrueEnum'
+        required:
+        - method
+        - reauthenticated
+        - at
+      - type: object
+        title: |
+          Authenticated by third-party provider
+        properties:
+          method:
+            $ref: '#/components/schemas/Allauth.AuthenticationMethodMethodEnum'
+          at:
+            $ref: '#/components/schemas/allauth.Timestamp'
+          provider:
+            $ref: '#/components/schemas/allauth.ProviderID'
+          uid:
+            $ref: '#/components/schemas/allauth.ProviderAccountID'
+        required:
+        - method
+        - reauthenticated
+        - at
+        - provider
+        - uid
+      - type: object
+        title: |
+          (Re)authenticated by 2FA
+        properties:
+          method:
+            $ref: '#/components/schemas/Allauth.AuthenticationMethodMethodEnum'
+          at:
+            $ref: '#/components/schemas/allauth.Timestamp'
+          type:
+            $ref: '#/components/schemas/allauth.AuthenticatorType'
+          reauthenticated:
+            type: boolean
+        required:
+        - method
+        - at
+        - type
+    allauth.AuthenticationResponse:
+      type: object
+      description: |
+        An authentication related response.
+      properties:
+        status:
+          $ref: '#/components/schemas/UnauthorizedStatus'
+        data:
+          type: object
+          properties:
+            flows:
+              type: array
+              items:
+                $ref: '#/components/schemas/allauth.Flow'
+          required:
+          - flows
+        meta:
+          $ref: '#/components/schemas/allauth.AuthenticationMeta'
+      required:
+      - status
+      - data
+      - meta
+    allauth.AuthenticatorCode:
+      type: string
+      description: |
+        An authenticator code.
+      example: '314159'
+    allauth.AuthenticatorID:
+      type: integer
+      description: |
+        Authenticator ID.
+      example: 123
+    allauth.AuthenticatorList:
+      type: array
+      items:
+        oneOf:
+        - $ref: '#/components/schemas/allauth.TOTPAuthenticator'
+        - $ref: '#/components/schemas/allauth.RecoveryCodesAuthenticator'
+        - $ref: '#/components/schemas/allauth.WebAuthnAuthenticator'
+    allauth.AuthenticatorType:
+      type: string
+      enum:
+      - recovery_codes
+      - totp
+      description: |
+        The type of authenticator.
+    allauth.BaseAuthenticationMeta:
+      type: object
+      properties:
+        session_token:
+          type: string
+          description: |
+            The session token (`app` clients only).
+          example: ufwcig0zen9skyd545jc0fkq813ghar2
+        access_token:
+          type: string
+          description: |
+            The access token (`app` clients only).
+          example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdW
+    allauth.BaseAuthenticator:
+      type: object
+      properties:
+        last_used_at:
+          $ref: '#/components/schemas/allauth.OptionalTimestamp'
+        created_at:
+          $ref: '#/components/schemas/allauth.Timestamp'
+      required:
+      - created_at
+      - last_used_at
+    allauth.ClientID:
+      type: string
+      description: |
+        The client ID (in case of OAuth2 or OpenID Connect based providers)
+      example: 123.apps.googleusercontent.com
+    allauth.Code:
+      type: string
+      description: |
+        An one-time code.
+      example: NQ3TM5
+    allauth.ConfigurationResponse:
+      type: object
+      properties:
+        data:
+          type: object
+          properties:
+            account:
+              $ref: '#/components/schemas/allauth.AccountConfiguration'
+            socialaccount:
+              $ref: '#/components/schemas/allauth.SocialAccountConfiguration'
+            mfa:
+              $ref: '#/components/schemas/allauth.MFAConfiguration'
+            usersessions:
+              $ref: '#/components/schemas/allauth.UserSessionsConfiguration'
+          required:
+          - account
+        status:
+          $ref: '#/components/schemas/allauth.StatusOK'
+      required:
+      - status
+      - data
+      example:
+        status: 200
+        data:
+          account:
+            authentication_method: email
+          socialaccount:
+            providers:
+            - id: google
+              name: Google
+              flows:
+              - provider_redirect
+              - provider_token
+              client_id: 123.apps.googleusercontent.com
+          mfa:
+            supported_types:
+            - recovery_codes
+            - totp
+          usersessions:
+            track_activity: false
+    allauth.ConfirmLoginCode:
+      type: object
+      properties:
+        code:
+          $ref: '#/components/schemas/allauth.Code'
+      required:
+      - code
+    allauth.ConflictResponse:
+      type: object
+      properties:
+        status:
+          $ref: '#/components/schemas/Allauth.ConflictResponseStatusEnum'
+      required:
+      - status
+    allauth.Email:
+      type: string
+      description: |
+        The email address.
+      example: email@domain.org
+    allauth.EmailAddress:
+      type: object
+      properties:
+        email:
+          $ref: '#/components/schemas/allauth.Email'
+        primary:
+          type: boolean
+          example: true
+        verified:
+          type: boolean
+          example: false
+      required:
+      - email
+      - primary
+      - verified
+    allauth.EmailVerificationInfo:
+      type: object
+      properties:
+        status:
+          $ref: '#/components/schemas/allauth.StatusOK'
+        data:
+          type: object
+          properties:
+            email:
+              $ref: '#/components/schemas/allauth.Email'
+            user:
+              $ref: '#/components/schemas/allauth.User'
+          required:
+          - email
+          - user
+        meta:
+          type: object
+          properties:
+            is_authenticating:
+              type: boolean
+          required:
+          - is_authenticating
+      required:
+      - status
+      - data
+      - meta
+    allauth.EndSessions:
+      type: object
+      properties:
+        sessions:
+          description: |
+            The IDs of the sessions that are to be ended.
+          type: array
+          items:
+            type: integer
+            example: 123
+      required:
+      - sessions
+    allauth.ErrorResponse:
+      type: object
+      properties:
+        status:
+          allOf:
+          - $ref: '#/components/schemas/Allauth.ErrorResponseStatusEnum'
+          example: 400
+        errors:
+          type: array
+          items:
+            type: object
+            properties:
+              code:
+                type: string
+                example: invalid
+                description: |
+                  An error code.
+              param:
+                type: string
+                example: email
+                description: |
+                  The name of the input parameter that was incorrect.
+              message:
+                type: number
+                example: Enter a valid email address.
+                description: |
+                  A human readable error message.
+            required:
+            - code
+            - message
+    allauth.Flow:
+      type: object
+      properties:
+        id:
+          $ref: '#/components/schemas/IdEnum'
+        provider:
+          $ref: '#/components/schemas/allauth.Provider'
+        is_pending:
+          $ref: '#/components/schemas/IsTrueEnum'
+      required:
+      - id
+    allauth.ForbiddenResponse:
+      type: object
+      properties:
+        status:
+          $ref: '#/components/schemas/Allauth.ForbiddenResponseStatusEnum'
+      required:
+      - status
+    allauth.Login:
+      type: object
+      properties:
+        password:
+          $ref: '#/components/schemas/allauth.Password'
+      required:
+      - password
+      anyOf:
+      - title: Login by username
+        properties:
+          username:
+            $ref: '#/components/schemas/allauth.Username'
+        required:
+        - username
+      - title: Login by email
+        properties:
+          email:
+            $ref: '#/components/schemas/allauth.Email'
+        required:
+        - email
+    allauth.MFAAuthenticate:
+      type: object
+      properties:
+        code:
+          $ref: '#/components/schemas/allauth.AuthenticatorCode'
+      required:
+      - code
+    allauth.MFAConfiguration:
+      type: object
+      description: |
+        Configuration of the Django `allauth.mfa` app.
+      properties:
+        supported_types:
+          type: array
+          description: |
+            Matches `settings.MFA_SUPPORTED_TYPES`.
+          items:
+            $ref: '#/components/schemas/allauth.AuthenticatorType'
+      required:
+      - supported_types
+    allauth.OptionalTimestamp:
+      nullable: true
+      $ref: '#/components/schemas/allauth.Timestamp'
+    allauth.PasskeySignup:
+      type: object
+      properties:
+        email:
+          $ref: '#/components/schemas/allauth.Email'
+        username:
+          $ref: '#/components/schemas/allauth.Username'
+      required:
+      - email
+    allauth.Password:
+      type: string
+      description: |
+        The password.
+      example: Alohomora!
+    allauth.Process:
+      type: string
+      description: |
+        The process to be executed when the user successfully
+        authenticates. When set to `login`, the user will be logged into the
+        account to which the provider account is connected, or if no such
+        account exists, a signup will occur. If set to `connect`, the provider
+        account will be connected to the list of provider accounts for the
+        currently authenticated user.
+      enum:
+      - login
+      - connect
+      example: login
+    allauth.Provider:
+      type: object
+      properties:
+        id:
+          type: string
+          example: google
+          description: |
+            The provider ID.
+        name:
+          type: string
+          description: |
+            The name of the provider.
+          example: Google
+        client_id:
+          type: string
+          description: |
+            The client ID (in case of OAuth2 or OpenID Connect based providers)
+          example: 123.apps.googleusercontent.com
+        flows:
+          type: array
+          description: |
+            The authentication flows the provider integration supports.
+          items:
+            $ref: '#/components/schemas/FlowsEnum'
+      required:
+      - id
+      - name
+      - flows
+    allauth.ProviderAccount:
+      type: object
+      properties:
+        uid:
+          $ref: '#/components/schemas/allauth.ProviderAccountID'
+        display:
+          type: string
+          description: |
+            A name derived from the third-party provider account data.
+          example: Wizzkid
+        provider:
+          $ref: '#/components/schemas/allauth.Provider'
+      required:
+      - uid
+      - provider
+      - display
+    allauth.ProviderAccountID:
+      type: string
+      description: |
+        The provider specific account ID.
+      example: goo12345
+    allauth.ProviderID:
+      type: string
+      description: |
+        The provider ID.
+      example: google
+    allauth.ProviderList:
+      type: array
+      items:
+        $ref: '#/components/schemas/allauth.Provider'
+    allauth.ProviderRedirect:
+      type: object
+      properties:
+        provider:
+          $ref: '#/components/schemas/allauth.ProviderID'
+        callback_url:
+          type: string
+          description: |
+            The URL to return to after the redirect flow is complete.
+          example: https://app.project.org/account/provider/callback
+        process:
+          $ref: '#/components/schemas/allauth.Process'
+      required:
+      - provider
+      - process
+      - callback_url
+    allauth.ProviderSignup:
+      type: object
+      properties:
+        email:
+          $ref: '#/components/schemas/allauth.Email'
+      required:
+      - email
+    allauth.ProviderToken:
+      type: object
+      properties:
+        provider:
+          $ref: '#/components/schemas/allauth.ProviderID'
+        process:
+          $ref: '#/components/schemas/allauth.Process'
+        token:
+          description: |
+            The token.
+          type: object
+          properties:
+            client_id:
+              $ref: '#/components/schemas/allauth.ClientID'
+            id_token:
+              type: string
+              description: |
+                The ID token.
+              example: eyJhbGciOiJI
+            access_token:
+              type: string
+              description: |
+                The access token.
+              example: 36POk6yJV_adQs
+          required:
+          - client_id
+      required:
+      - provider
+      - process
+      - token
+    allauth.Reauthenticate:
+      type: object
+      properties:
+        password:
+          $ref: '#/components/schemas/allauth.Password'
+      required:
+      - password
+    allauth.ReauthenticationResponse:
+      type: object
+      description: |
+        A response indicating reauthentication is required.
+      properties:
+        status:
+          $ref: '#/components/schemas/UnauthorizedStatus'
+        data:
+          $ref: '#/components/schemas/allauth.Authenticated'
+        meta:
+          $ref: '#/components/schemas/allauth.AuthenticatedMeta'
+      required:
+      - status
+      - data
+      - meta
+    allauth.RecoveryCodesAuthenticator:
+      allOf:
+      - $ref: '#/components/schemas/allauth.BaseAuthenticator'
+      - type: object
+        properties:
+          type:
+            allOf:
+            - $ref: '#/components/schemas/Allauth.RecoveryCodesAuthenticatorTypeEnum'
+            description: |
+              The authenticator type.
+          total_code_count:
+            type: integer
+            description: |
+              The total number of recovery codes that initially were available.
+            example: 10
+          unused_code_count:
+            type: integer
+            description: |
+              The number of recovery codes that are unused.
+            example: 7
+        required:
+        - type
+        - total_code_count
+        - unused_code_count
+    allauth.RequestLoginCode:
+      type: object
+      properties:
+        email:
+          $ref: '#/components/schemas/allauth.Email'
+      required:
+      - email
+    allauth.RequestPassword:
+      type: object
+      properties:
+        email:
+          $ref: '#/components/schemas/allauth.Email'
+      required:
+      - email
+    allauth.ResetPassword:
+      type: object
+      properties:
+        key:
+          type: string
+          description: The password reset key
+          example: 2f-c4nqd4-e07d9bc694f9f28cd4fe92569d495333
+        password:
+          $ref: '#/components/schemas/allauth.Password'
+      required:
+      - key
+      - password
+    allauth.SensitiveRecoveryCodesAuthenticator:
+      allOf:
+      - $ref: '#/components/schemas/allauth.RecoveryCodesAuthenticator'
+      - type: object
+        properties:
+          unused_codes:
+            type: array
+            description: |
+              The list of unused codes.
+            items:
+              $ref: '#/components/schemas/allauth.AuthenticatorCode'
+        required:
+        - unused_codes
+    allauth.Session:
+      type: object
+      properties:
+        user_agent:
+          type: string
+          example: Mozilla Firefox
+        ip:
+          type: string
+          example: 127.2.3.192
+        created_at:
+          $ref: '#/components/schemas/allauth.Timestamp'
+        is_current:
+          type: boolean
+        id:
+          type: integer
+          example: 123
+        last_seen_at:
+          $ref: '#/components/schemas/allauth.Timestamp'
+      required:
+      - user_agent
+      - ip
+      - created_at
+      - is_current
+      - id
+    allauth.SessionGoneResponse:
+      type: object
+      description: |
+        The session is expired or invalid.
+      properties:
+        status:
+          $ref: '#/components/schemas/Allauth.SessionGoneResponseStatusEnum'
+        data:
+          type: object
+        meta:
+          $ref: '#/components/schemas/allauth.AuthenticationMeta'
+      required:
+      - status
+      - data
+      - meta
+    allauth.Signup:
+      type: object
+      properties:
+        email:
+          $ref: '#/components/schemas/allauth.Email'
+        username:
+          $ref: '#/components/schemas/allauth.Username'
+        password:
+          $ref: '#/components/schemas/allauth.Password'
+      required:
+      - password
+    allauth.SocialAccountConfiguration:
+      type: object
+      description: |
+        Configuration of the Django `allauth.socialaccount` app.
+      properties:
+        providers:
+          $ref: '#/components/schemas/allauth.ProviderList'
+      required:
+      - providers
+    allauth.StatusOK:
+      type: integer
+      enum:
+      - 200
+    allauth.TOTPAuthenticator:
+      allOf:
+      - $ref: '#/components/schemas/allauth.BaseAuthenticator'
+      - type: object
+        properties:
+          type:
+            $ref: '#/components/schemas/Allauth.TOTPAuthenticatorTypeEnum'
+        required:
+        - type
+    allauth.Timestamp:
+      type: number
+      description: |
+        An epoch based timestamp (trivial to parse using: `new Date(value)*1000`)
+      example: 1711555057.065702
+    allauth.User:
+      type: object
+      properties:
+        id:
+          description: |
+            The user ID.
+          oneOf:
+          - type: integer
+            example: 123
+          - type: string
+            example: 89d3f9a0-51a5-49dd-8b97-7536641958e9
+        display:
+          type: string
+          description: |
+            The display name for the user.
+          example: Magic Wizard
+        has_usable_password:
+          type: boolean
+          description: |
+            Whether or not the account has a password set.
+          example: true
+        email:
+          $ref: '#/components/schemas/allauth.Email'
+        username:
+          $ref: '#/components/schemas/allauth.Username'
+    allauth.UserSessionsConfiguration:
+      type: object
+      description: |
+        Configuration of the Django `allauth.usersessions` app.
+      properties:
+        track_activity:
+          type: boolean
+          description: |
+            Matches `settings.USERSESSIONS_TRACK_ACTIVITY`.
+      required:
+      - track_activity
+    allauth.Username:
+      type: string
+      description: |
+        The username.
+      example: wizard
+    allauth.VerifyEmail:
+      type: object
+      properties:
+        key:
+          type: string
+          description: The email verification key
+          example: 2f-c4nqd4-e07d9bc694f9f28cd4fe92569d495333
+      required:
+      - key
+    allauth.WebAuthnAuthenticator:
+      allOf:
+      - $ref: '#/components/schemas/allauth.BaseAuthenticator'
+      - type: object
+        properties:
+          type:
+            $ref: '#/components/schemas/Allauth.WebAuthnAuthenticatorTypeEnum'
+          id:
+            $ref: '#/components/schemas/allauth.AuthenticatorID'
+          name:
+            type: string
+            example: Master key
+          is_passwordless:
+            type: boolean
+            description: |
+              Whether or not this authenticator represents a passkey. Absent if it is not specified.
+        required:
+        - type
+        - id
+        - name
+    allauth.WebAuthnCredential:
+      type: object
+      example:
+        credential:
+          type: public-key
+          id: -J4JNfPfnLyRSMK4R...
+          rawId: -J4JNfPfnLyRSMK4R...
+          authenticatorAttachment: cross-platform
+          response:
+            clientDataJSON: eyJjaGFsbGVuZ2UiOi...
+            authenticatorData: SZYN5YgO...
+            signature: MEUCIE-7sqILygPqGbrRZ4j2nqeqUU...
+            userHandle: Mg...
+          clientExtensionResults: {}
+    allauth.WebAuthnCredentialCreationOptions:
+      type: object
+      properties:
+        creation_options:
+          type: object
+          example:
+            status: 200
+            data:
+              request_options:
+                publicKey:
+                  challenge: aOecJJtLA2e-Dj2WU-zbRoJewbQqSUPxoA9EzsUL72o
+                  rpId: localhost
+                  allowCredentials: []
+                  userVerification: preferred
+      required:
+      - creation_options
+    allauth.WebAuthnCredentialRequestOptions:
+      type: object
+      properties:
+        request_options:
+          type: object
+          example:
+            status: 200
+            data:
+              request_options:
+                publicKey:
+                  challenge: aOecJJtLA2e-Dj2WU-zbRoJewbQqSUPxoA9EzsUL72o
+                  rpId: localhost
+                  allowCredentials: []
+                  userVerification: preferred
+      required:
+      - request_options
+  securitySchemes:
+    basicAuth:
+      type: http
+      scheme: basic
+    cookieAuth:
+      type: apiKey
+      in: cookie
+      name: sessionid
+    oauth2:
+      type: oauth2
+      flows:
+        authorizationCode:
+          authorizationUrl: /o/authorize/
+          tokenUrl: /o/token/
+          refreshUrl: /o/revoke_token/
+          scopes:
+            g:read: General Read scope
+            openid: OpenID Connect scope
+            a:staff: User Role Staff
+            a:superuser: User Role Superuser
+            r:view:admin: GET for Role Admin
+            r:view:part_category: GET for Role Part Categories
+            r:view:part: GET for Role Parts
+            r:view:stocktake: GET for Role Stocktake
+            r:view:stock_location: GET for Role Stock Locations
+            r:view:stock: GET for Role Stock Items
+            r:view:build: GET for Role Build Orders
+            r:view:purchase_order: GET for Role Purchase Orders
+            r:view:sales_order: GET for Role Sales Orders
+            r:view:return_order: GET for Role Return Orders
+            r:add:admin: POST for Role Admin
+            r:add:part_category: POST for Role Part Categories
+            r:add:part: POST for Role Parts
+            r:add:stocktake: POST for Role Stocktake
+            r:add:stock_location: POST for Role Stock Locations
+            r:add:stock: POST for Role Stock Items
+            r:add:build: POST for Role Build Orders
+            r:add:purchase_order: POST for Role Purchase Orders
+            r:add:sales_order: POST for Role Sales Orders
+            r:add:return_order: POST for Role Return Orders
+            r:change:admin: PUT / PATCH for Role Admin
+            r:change:part_category: PUT / PATCH for Role Part Categories
+            r:change:part: PUT / PATCH for Role Parts
+            r:change:stocktake: PUT / PATCH for Role Stocktake
+            r:change:stock_location: PUT / PATCH for Role Stock Locations
+            r:change:stock: PUT / PATCH for Role Stock Items
+            r:change:build: PUT / PATCH for Role Build Orders
+            r:change:purchase_order: PUT / PATCH for Role Purchase Orders
+            r:change:sales_order: PUT / PATCH for Role Sales Orders
+            r:change:return_order: PUT / PATCH for Role Return Orders
+            r:delete:admin: DELETE for Role Admin
+            r:delete:part_category: DELETE for Role Part Categories
+            r:delete:part: DELETE for Role Parts
+            r:delete:stocktake: DELETE for Role Stocktake
+            r:delete:stock_location: DELETE for Role Stock Locations
+            r:delete:stock: DELETE for Role Stock Items
+            r:delete:build: DELETE for Role Build Orders
+            r:delete:purchase_order: DELETE for Role Purchase Orders
+            r:delete:sales_order: DELETE for Role Sales Orders
+            r:delete:return_order: DELETE for Role Return Orders
+        clientCredentials:
+          tokenUrl: /o/token/
+          refreshUrl: /o/revoke_token/
+          scopes:
+            g:read: General Read scope
+            openid: OpenID Connect scope
+            a:staff: User Role Staff
+            a:superuser: User Role Superuser
+            r:view:admin: GET for Role Admin
+            r:view:part_category: GET for Role Part Categories
+            r:view:part: GET for Role Parts
+            r:view:stocktake: GET for Role Stocktake
+            r:view:stock_location: GET for Role Stock Locations
+            r:view:stock: GET for Role Stock Items
+            r:view:build: GET for Role Build Orders
+            r:view:purchase_order: GET for Role Purchase Orders
+            r:view:sales_order: GET for Role Sales Orders
+            r:view:return_order: GET for Role Return Orders
+            r:add:admin: POST for Role Admin
+            r:add:part_category: POST for Role Part Categories
+            r:add:part: POST for Role Parts
+            r:add:stocktake: POST for Role Stocktake
+            r:add:stock_location: POST for Role Stock Locations
+            r:add:stock: POST for Role Stock Items
+            r:add:build: POST for Role Build Orders
+            r:add:purchase_order: POST for Role Purchase Orders
+            r:add:sales_order: POST for Role Sales Orders
+            r:add:return_order: POST for Role Return Orders
+            r:change:admin: PUT / PATCH for Role Admin
+            r:change:part_category: PUT / PATCH for Role Part Categories
+            r:change:part: PUT / PATCH for Role Parts
+            r:change:stocktake: PUT / PATCH for Role Stocktake
+            r:change:stock_location: PUT / PATCH for Role Stock Locations
+            r:change:stock: PUT / PATCH for Role Stock Items
+            r:change:build: PUT / PATCH for Role Build Orders
+            r:change:purchase_order: PUT / PATCH for Role Purchase Orders
+            r:change:sales_order: PUT / PATCH for Role Sales Orders
+            r:change:return_order: PUT / PATCH for Role Return Orders
+            r:delete:admin: DELETE for Role Admin
+            r:delete:part_category: DELETE for Role Part Categories
+            r:delete:part: DELETE for Role Parts
+            r:delete:stocktake: DELETE for Role Stocktake
+            r:delete:stock_location: DELETE for Role Stock Locations
+            r:delete:stock: DELETE for Role Stock Items
+            r:delete:build: DELETE for Role Build Orders
+            r:delete:purchase_order: DELETE for Role Purchase Orders
+            r:delete:sales_order: DELETE for Role Sales Orders
+            r:delete:return_order: DELETE for Role Return Orders
+    tokenAuth:
+      type: apiKey
+      in: header
+      name: Authorization
+      description: Token-based authentication with required prefix "Token"
+servers:
+- url: http://localhost:8000
+externalDocs:
+  description: More information about InvenTree in the official docs
+  url: https://docs.inventree.org
diff --git a/export/341/inventree_filters.yml b/export/341/inventree_filters.yml
new file mode 100644
index 0000000..6243f3c
--- /dev/null
+++ b/export/341/inventree_filters.yml
@@ -0,0 +1,699 @@
+-   body: ''
+    library: ''
+    meta: {}
+    name: addslashes
+    title: 'Add slashes before quotes. Useful for escaping strings in CSV, for
+
+        example. Less useful for escaping JavaScript; use the ``escapejs``
+
+        filter instead.'
+-   body: ''
+    library: ''
+    meta: {}
+    name: capfirst
+    title: Capitalize the first character of the value.
+-   body: ''
+    library: ''
+    meta: {}
+    name: escapejs
+    title: Hex encode characters for use in JavaScript strings.
+-   body: ''
+    library: ''
+    meta: {}
+    name: json_script
+    title: 'Output value JSON-encoded, wrapped in a <script type="application/json">
+
+        tag (with an optional id).'
+-   body: 'If called without an argument, display the floating point number with one
+
+        decimal place -- but only if there''s a decimal place to be displayed:
+
+
+        * num1 = 34.23234
+
+        * num2 = 34.00000
+
+        * num3 = 34.26000
+
+        * {{ num1|floatformat }} displays "34.2"
+
+        * {{ num2|floatformat }} displays "34"
+
+        * {{ num3|floatformat }} displays "34.3"
+
+
+        If arg is positive, always display exactly arg number of decimal places:
+
+
+        * {{ num1|floatformat:3 }} displays "34.232"
+
+        * {{ num2|floatformat:3 }} displays "34.000"
+
+        * {{ num3|floatformat:3 }} displays "34.260"
+
+
+        If arg is negative, display arg number of decimal places -- but only if
+
+        there are places to be displayed:
+
+
+        * {{ num1|floatformat:"-3" }} displays "34.232"
+
+        * {{ num2|floatformat:"-3" }} displays "34"
+
+        * {{ num3|floatformat:"-3" }} displays "34.260"
+
+
+        If arg has the ''g'' suffix, force the result to be grouped by the
+
+        THOUSAND_SEPARATOR for the active locale. When the active locale is
+
+        en (English):
+
+
+        * {{ 6666.6666|floatformat:"2g" }} displays "6,666.67"
+
+        * {{ 10000|floatformat:"g" }} displays "10,000"
+
+
+        If arg has the ''u'' suffix, force the result to be unlocalized. When the
+
+        active locale is pl (Polish):
+
+
+        * {{ 66666.6666|floatformat:"2" }} displays "66666,67"
+
+        * {{ 66666.6666|floatformat:"2u" }} displays "66666.67"
+
+
+        If the input float is infinity or NaN, display the string representation
+
+        of that value.'
+    library: ''
+    meta: {}
+    name: floatformat
+    title: Display a float to a specified number of decimal places.
+-   body: ''
+    library: ''
+    meta: {}
+    name: iriencode
+    title: Escape an IRI value for use in a URL.
+-   body: ''
+    library: ''
+    meta: {}
+    name: linenumbers
+    title: Display text with line numbers.
+-   body: ''
+    library: ''
+    meta: {}
+    name: lower
+    title: Convert a string into all lowercase.
+-   body: 'For an integer, it''s a list of digits.
+
+        For a string, it''s a list of characters.'
+    library: ''
+    meta: {}
+    name: make_list
+    title: Return the value turned into a list.
+-   body: ''
+    library: ''
+    meta: {}
+    name: slugify
+    title: 'Convert to ASCII. Convert spaces to hyphens. Remove characters that aren''t
+
+        alphanumerics, underscores, or hyphens. Convert to lowercase. Also strip
+
+        leading and trailing whitespace.'
+-   body: 'This specifier uses Python string formatting syntax, with the exception
+
+        that the leading "%" is dropped.
+
+
+        See https://docs.python.org/library/stdtypes.html#printf-style-string-formatting
+
+        for documentation of Python string formatting.'
+    library: ''
+    meta: {}
+    name: stringformat
+    title: Format the variable according to the arg, a string formatting specifier.
+-   body: ''
+    library: ''
+    meta: {}
+    name: title
+    title: Convert a string into titlecase.
+-   body: ''
+    library: ''
+    meta: {}
+    name: truncatechars
+    title: Truncate a string after `arg` number of characters.
+-   body: ''
+    library: ''
+    meta: {}
+    name: truncatechars_html
+    title: 'Truncate HTML after `arg` number of chars.
+
+        Preserve newlines in the HTML.'
+-   body: ''
+    library: ''
+    meta: {}
+    name: truncatewords
+    title: 'Truncate a string after `arg` number of words.
+
+        Remove newlines within the string.'
+-   body: ''
+    library: ''
+    meta: {}
+    name: truncatewords_html
+    title: 'Truncate HTML after `arg` number of words.
+
+        Preserve newlines in the HTML.'
+-   body: ''
+    library: ''
+    meta: {}
+    name: upper
+    title: Convert a string into all uppercase.
+-   body: 'The ``safe`` parameter determines the characters which should not be
+
+        escaped by Python''s quote() function. If not provided, use the default safe
+
+        characters (but an empty string can be provided when *all* characters
+
+        should be escaped).'
+    library: ''
+    meta: {}
+    name: urlencode
+    title: Escape a value for use in a URL.
+-   body: ''
+    library: ''
+    meta: {}
+    name: urlize
+    title: Convert URLs in plain text into clickable links.
+-   body: ''
+    library: ''
+    meta:
+        Argument: Length to truncate URLs to.
+    name: urlizetrunc
+    title: 'Convert URLs into clickable links, truncating URLs to the given character
+
+        limit, and adding ''rel=nofollow'' attribute to discourage spamming.'
+-   body: ''
+    library: ''
+    meta: {}
+    name: wordcount
+    title: Return the number of words.
+-   body: ''
+    library: ''
+    meta: {}
+    name: wordwrap
+    title: Wrap words at `arg` line length.
+-   body: ''
+    library: ''
+    meta: {}
+    name: ljust
+    title: Left-align the value in a field of a given width.
+-   body: ''
+    library: ''
+    meta: {}
+    name: rjust
+    title: Right-align the value in a field of a given width.
+-   body: ''
+    library: ''
+    meta: {}
+    name: center
+    title: Center the value in a field of a given width.
+-   body: ''
+    library: ''
+    meta: {}
+    name: cut
+    title: Remove all values of arg from the given string.
+-   body: ''
+    library: ''
+    meta: {}
+    name: escape
+    title: Mark the value as a string that should be auto-escaped.
+-   body: ''
+    library: ''
+    meta: {}
+    name: force_escape
+    title: 'Escape a string''s HTML. Return a new string containing the escaped
+
+        characters (as opposed to "escape", which marks the content for later
+
+        possible escaping).'
+-   body: ''
+    library: ''
+    meta: {}
+    name: linebreaks
+    title: 'Replace line breaks in plain text with appropriate HTML; a single
+
+        newline becomes an HTML line break (``<br>``) and a new line
+
+        followed by a blank line becomes a paragraph break (``</p>``).'
+-   body: ''
+    library: ''
+    meta: {}
+    name: linebreaksbr
+    title: 'Convert all newlines in a piece of plain text to HTML line breaks
+
+        (``<br>``).'
+-   body: ''
+    library: ''
+    meta: {}
+    name: safe
+    title: Mark the value as a string that should not be auto-escaped.
+-   body: ''
+    library: ''
+    meta: {}
+    name: safeseq
+    title: 'A "safe" filter for sequences. Mark each element in the sequence,
+
+        individually, as safe, after converting them to strings. Return a list
+
+        with the results.'
+-   body: ''
+    library: ''
+    meta: {}
+    name: striptags
+    title: Strip all [X]HTML tags.
+-   body: ''
+    library: ''
+    meta: {}
+    name: dictsort
+    title: 'Given a list of dicts, return that list sorted by the property given in
+
+        the argument.'
+-   body: ''
+    library: ''
+    meta: {}
+    name: dictsortreversed
+    title: 'Given a list of dicts, return that list sorted in reverse order by the
+
+        property given in the argument.'
+-   body: ''
+    library: ''
+    meta: {}
+    name: first
+    title: Return the first item in a list.
+-   body: ''
+    library: ''
+    meta: {}
+    name: join
+    title: Join a list with a string, like Python's ``str.join(list)``.
+-   body: ''
+    library: ''
+    meta: {}
+    name: last
+    title: Return the last item in a list.
+-   body: ''
+    library: ''
+    meta: {}
+    name: length
+    title: Return the length of the value - useful for lists.
+-   body: ''
+    library: ''
+    meta: {}
+    name: length_is
+    title: Return a boolean of whether the value's length is the argument.
+-   body: ''
+    library: ''
+    meta: {}
+    name: random
+    title: Return a random item from the list.
+-   body: ''
+    library: ''
+    meta: {}
+    name: slice
+    title: Return a slice of the list using the same syntax as Python's list slicing.
+-   body: "Assume the list is in the proper format. For example, if ``var`` contains:\n\
+        ``['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']]``, then\n``{{\
+        \ var|unordered_list }}`` returns::\n\n    <li>States\n    <ul>\n        \
+        \    <li>Kansas\n            <ul>\n                    <li>Lawrence</li>\n\
+        \                    <li>Topeka</li>\n            </ul>\n            </li>\n\
+        \            <li>Illinois</li>\n    </ul>\n    </li>"
+    library: ''
+    meta: {}
+    name: unordered_list
+    title: 'Recursively take a self-nested list and return an HTML unordered list
+        --
+
+        WITHOUT opening and closing <ul> tags.'
+-   body: ''
+    library: ''
+    meta: {}
+    name: add
+    title: Add the arg to the value.
+-   body: ''
+    library: ''
+    meta: {}
+    name: get_digit
+    title: 'Given a whole number, return the requested digit of it, where 1 is the
+
+        right-most digit, 2 is the second-right-most digit, etc. Return the
+
+        original value for invalid input (if input or argument is not an integer,
+
+        or if argument is less than 1). Otherwise, output is always an integer.'
+-   body: ''
+    library: ''
+    meta: {}
+    name: date
+    title: Format a date according to the given format.
+-   body: ''
+    library: ''
+    meta: {}
+    name: time
+    title: Format a time according to the given format.
+-   body: ''
+    library: ''
+    meta: {}
+    name: timesince
+    title: Format a date as the time since that date (i.e. "4 days, 6 hours").
+-   body: ''
+    library: ''
+    meta: {}
+    name: timeuntil
+    title: Format a date as the time until that date (i.e. "4 days, 6 hours").
+-   body: ''
+    library: ''
+    meta: {}
+    name: default
+    title: If value is unavailable, use given default.
+-   body: ''
+    library: ''
+    meta: {}
+    name: default_if_none
+    title: If value is None, use given default.
+-   body: ''
+    library: ''
+    meta: {}
+    name: divisibleby
+    title: Return True if the value is divisible by the argument.
+-   body: "==========  ======================  ==================================\n\
+        Value       Argument                Outputs\n==========  ======================\
+        \  ==================================\n``True``    ``\"yeah,no,maybe\"`` \
+        \    ``yeah``\n``False``   ``\"yeah,no,maybe\"``     ``no``\n``None``    ``\"\
+        yeah,no,maybe\"``     ``maybe``\n``None``    ``\"yeah,no\"``           ``\"\
+        no\"`` (converts None to False\n                                    if no\
+        \ mapping for None is given.\n==========  ======================  =================================="
+    library: ''
+    meta: {}
+    name: yesno
+    title: 'Given a string mapping values for true, false, and (optionally) None,
+
+        return one of those strings according to the value:'
+-   body: ''
+    library: ''
+    meta: {}
+    name: filesizeformat
+    title: 'Format the value like a ''human-readable'' file size (i.e. 13 KB, 4.1
+        MB,
+
+        102 bytes, etc.).'
+-   body: '* If value is 0, vote{{ value|pluralize }} display "votes".
+
+        * If value is 1, vote{{ value|pluralize }} display "vote".
+
+        * If value is 2, vote{{ value|pluralize }} display "votes".
+
+
+        If an argument is provided, use that string instead:
+
+
+        * If value is 0, class{{ value|pluralize:"es" }} display "classes".
+
+        * If value is 1, class{{ value|pluralize:"es" }} display "class".
+
+        * If value is 2, class{{ value|pluralize:"es" }} display "classes".
+
+
+        If the provided argument contains a comma, use the text before the comma
+
+        for the singular case and the text after the comma for the plural case:
+
+
+        * If value is 0, cand{{ value|pluralize:"y,ies" }} display "candies".
+
+        * If value is 1, cand{{ value|pluralize:"y,ies" }} display "candy".
+
+        * If value is 2, cand{{ value|pluralize:"y,ies" }} display "candies".'
+    library: ''
+    meta: {}
+    name: pluralize
+    title: 'Return a plural suffix if the value is not 1, ''1'', or an object of
+
+        length 1. By default, use ''s'' as the suffix:'
+-   body: ''
+    library: ''
+    meta: {}
+    name: phone2numeric
+    title: Take a phone number and converts it in to its numerical equivalent.
+-   body: ''
+    library: ''
+    meta: {}
+    name: pprint
+    title: A wrapper around pprint.pprint -- for debugging, really.
+-   body: ''
+    library: admin_modify
+    meta: {}
+    name: cell_count
+    title: Return the number of cells used in a tabular inline.
+-   body: ''
+    library: admin_urls
+    meta: {}
+    name: admin_urlname
+    title: ''
+-   body: ''
+    library: admin_urls
+    meta: {}
+    name: admin_urlquote
+    title: ''
+-   body: ''
+    library: flags_debug
+    meta: {}
+    name: bool_enabled
+    title: ''
+-   body: ''
+    library: flags_debug
+    meta: {}
+    name: conditions_without_bool
+    title: ''
+-   body: ''
+    library: flags_debug
+    meta: {}
+    name: required_conditions_without_bool
+    title: ''
+-   body: ''
+    library: flags_debug
+    meta: {}
+    name: state_str
+    title: Construct a string that describes the current state of the flag
+-   body: ''
+    library: humanize
+    meta: {}
+    name: ordinal
+    title: 'Convert an integer to its ordinal as a string. 1 is ''1st'', 2 is ''2nd'',
+
+        3 is ''3rd'', etc. Works for any integer.'
+-   body: ''
+    library: humanize
+    meta: {}
+    name: intcomma
+    title: 'Convert an integer to a string containing commas every three digits.
+
+        For example, 3000 becomes ''3,000'' and 45000 becomes ''45,000''.'
+-   body: ''
+    library: humanize
+    meta: {}
+    name: intword
+    title: 'Convert a large integer to a friendly text representation. Works best
+
+        for numbers over 1 million. For example, 1000000 becomes ''1.0 million'',
+
+        1200000 becomes ''1.2 million'' and ''1200000000'' becomes ''1.2 billion''.'
+-   body: ''
+    library: humanize
+    meta: {}
+    name: apnumber
+    title: 'For numbers 1-9, return the number spelled out. Otherwise, return the
+
+        number. This follows Associated Press style.'
+-   body: ''
+    library: humanize
+    meta: {}
+    name: naturalday
+    title: 'For date values that are tomorrow, today or yesterday compared to
+
+        present day return representing string. Otherwise, return a string
+
+        formatted according to settings.DATE_FORMAT.'
+-   body: ''
+    library: humanize
+    meta: {}
+    name: naturaltime
+    title: 'For date and time values show how many seconds, minutes, or hours ago
+
+        compared to current timestamp return representing string.'
+-   body: ''
+    library: i18n
+    meta: {}
+    name: language_name
+    title: ''
+-   body: ''
+    library: i18n
+    meta: {}
+    name: language_name_translated
+    title: ''
+-   body: ''
+    library: i18n
+    meta: {}
+    name: language_name_local
+    title: ''
+-   body: ''
+    library: i18n
+    meta: {}
+    name: language_bidi
+    title: ''
+-   body: ''
+    library: inventree_extras
+    meta:
+        Usage: ''
+    name: keyvalue
+    title: Access to key of supplied dict.
+-   body: ''
+    library: l10n
+    meta: {}
+    name: localize
+    title: 'Force a value to be rendered as a localized value,
+
+        regardless of the value of ``settings.USE_L10N``.'
+-   body: ''
+    library: l10n
+    meta: {}
+    name: unlocalize
+    title: 'Force a value to be rendered as a non-localized value,
+
+        regardless of the value of ``settings.USE_L10N``.'
+-   body: ''
+    library: markdownify
+    meta: {}
+    name: markdownify
+    title: ''
+-   body: "   new_level\n      ``True`` if the current item is the start of a new\
+        \ level in\n      the tree, ``False`` otherwise.\n\n   closed_levels\n   \
+        \   A list of levels which end after the current item. This will\n      be\
+        \ an empty list if the next item is at the same level as the\n      current\
+        \ item.\n\nUsing this filter with unpacking in a ``{% for %}`` tag, you should\n\
+        have enough information about the tree structure to create a\nhierarchical\
+        \ representation of the tree.\n\nExample::\n\n   {% for genre,structure in\
+        \ genres|tree_info %}\n   {% if structure.new_level %}<ul><li>{% else %}</li><li>{%\
+        \ endif %}\n   {{ genre.name }}\n   {% for level in structure.closed_levels\
+        \ %}</li></ul>{% endfor %}\n   {% endfor %}"
+    library: mptt_tags
+    meta: {}
+    name: tree_info
+    title: 'Given a list of tree items, produces doubles of a tree item and a
+
+        ``dict`` containing information about the tree structure around the
+
+        item, with the following contents:'
+-   body: "Each path item will be coerced to unicode, so a list of model\ninstances\
+        \ may be given if required.\n\nExample::\n\n   {{ some_list|tree_path }}\n\
+        \   {{ some_node.get_ancestors|tree_path:\" > \" }}"
+    library: mptt_tags
+    meta: {}
+    name: tree_path
+    title: 'Creates a tree path represented by a list of ``items`` by joining
+
+        the items with a ``separator``.'
+-   body: ''
+    library: mptt_tags
+    meta: {}
+    name: cache_tree_children
+    title: Alias to `mptt.utils.get_cached_trees`.
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: with_location
+    title: ''
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: as_string
+    title: ''
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: as_list_of_strings
+    title: ''
+-   body: "Inserts classes into template variables that contain HTML tags,\nuseful\
+        \ for modifying forms without needing to change the Form objects.\n\nUsage:\n\
+        \n    {{ field.label_tag|add_class:\"control-label\" }}\n\nIn the case of\
+        \ REST Framework, the filter is used to add Bootstrap-specific\nclasses to\
+        \ the forms."
+    library: rest_framework
+    meta: {}
+    name: add_class
+    title: https://stackoverflow.com/questions/4124220/django-adding-css-classes-when-rendering-form-fields-in-a-template
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: format_value
+    title: ''
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: items
+    title: 'Simple filter to return the items of the dict. Useful when the dict may
+
+        have a key ''items'' which is resolved first in Django template dot-notation
+
+        lookup.  See issue #4931
+
+        Also see: https://stackoverflow.com/questions/15416662/django-template-loop-over-dictionary-items-with-items-as-key'
+-   body: 'As per `items` filter above, allows accessing `document.data` when
+
+        Document contains Link keyed-at "data".
+
+
+        See issue #5395'
+    library: rest_framework
+    meta: {}
+    name: data
+    title: 'Simple filter to access `data` attribute of object,
+
+        specifically coreapi.Document.'
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: schema_links
+    title: Recursively find every link in a schema, even nested.
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: add_nested_class
+    title: ''
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: break_long_headers
+    title: 'Breaks headers longer than 160 characters (~page length)
+
+        when possible (are comma separated)'
+-   body: This only makes sense within a {% localtime off %} block.
+    library: tz
+    meta: {}
+    name: localtime
+    title: Convert a datetime to local time in the active time zone.
+-   body: ''
+    library: tz
+    meta: {}
+    name: utc
+    title: Convert a datetime to UTC.
+-   body: 'The argument must be an instance of a tzinfo subclass or a time zone name.
+
+
+        Naive datetimes are assumed to be in local time in the default time zone.'
+    library: tz
+    meta: {}
+    name: timezone
+    title: Convert a datetime to local time in a given time zone.
diff --git a/export/341/inventree_settings.json b/export/341/inventree_settings.json
new file mode 100644
index 0000000..05c2a0f
--- /dev/null
+++ b/export/341/inventree_settings.json
@@ -0,0 +1,1038 @@
+{
+    "global": {
+        "SERVER_RESTART_REQUIRED": {
+            "name": "Restart required",
+            "description": "A setting has been changed which requires a server restart",
+            "default": "False",
+            "units": ""
+        },
+        "_PENDING_MIGRATIONS": {
+            "name": "Pending migrations",
+            "description": "Number of pending database migrations",
+            "default": "0",
+            "units": ""
+        },
+        "INVENTREE_INSTANCE_ID": {
+            "name": "Instance ID",
+            "description": "Unique identifier for this InvenTree instance",
+            "default": "06c0a4c5-5e41-4b1a-8b69-63ec225dff94",
+            "units": ""
+        },
+        "INVENTREE_ANNOUNCE_ID": {
+            "name": "Announce ID",
+            "description": "Announce the instance ID of the server in the server status info (unauthenticated)",
+            "default": "False",
+            "units": ""
+        },
+        "INVENTREE_INSTANCE": {
+            "name": "Server Instance Name",
+            "description": "String descriptor for the server instance",
+            "default": "InvenTree",
+            "units": ""
+        },
+        "INVENTREE_INSTANCE_TITLE": {
+            "name": "Use instance name",
+            "description": "Use the instance name in the title-bar",
+            "default": "False",
+            "units": ""
+        },
+        "INVENTREE_RESTRICT_ABOUT": {
+            "name": "Restrict showing `about`",
+            "description": "Show the `about` modal only to superusers",
+            "default": "False",
+            "units": ""
+        },
+        "INVENTREE_COMPANY_NAME": {
+            "name": "Company name",
+            "description": "Internal company name",
+            "default": "My company name",
+            "units": ""
+        },
+        "INVENTREE_BASE_URL": {
+            "name": "Base URL",
+            "description": "Base URL for server instance",
+            "default": "",
+            "units": ""
+        },
+        "INVENTREE_DEFAULT_CURRENCY": {
+            "name": "Default Currency",
+            "description": "Select base currency for pricing calculations",
+            "default": "USD",
+            "units": ""
+        },
+        "CURRENCY_CODES": {
+            "name": "Supported Currencies",
+            "description": "List of supported currency codes",
+            "default": "AUD,CAD,CNY,EUR,GBP,JPY,NZD,USD",
+            "units": ""
+        },
+        "CURRENCY_UPDATE_INTERVAL": {
+            "name": "Currency Update Interval",
+            "description": "How often to update exchange rates (set to zero to disable)",
+            "default": "1",
+            "units": "days"
+        },
+        "CURRENCY_UPDATE_PLUGIN": {
+            "name": "Currency Update Plugin",
+            "description": "Currency update plugin to use",
+            "default": "inventreecurrencyexchange",
+            "units": ""
+        },
+        "INVENTREE_DOWNLOAD_FROM_URL": {
+            "name": "Download from URL",
+            "description": "Allow download of remote images and files from external URL",
+            "default": "False",
+            "units": ""
+        },
+        "INVENTREE_DOWNLOAD_IMAGE_MAX_SIZE": {
+            "name": "Download Size Limit",
+            "description": "Maximum allowable download size for remote image",
+            "default": "1",
+            "units": "MB"
+        },
+        "INVENTREE_DOWNLOAD_FROM_URL_USER_AGENT": {
+            "name": "User-agent used to download from URL",
+            "description": "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)",
+            "default": "",
+            "units": ""
+        },
+        "INVENTREE_STRICT_URLS": {
+            "name": "Strict URL Validation",
+            "description": "Require schema specification when validating URLs",
+            "default": "True",
+            "units": ""
+        },
+        "INVENTREE_UPDATE_CHECK_INTERVAL": {
+            "name": "Update Check Interval",
+            "description": "How often to check for updates (set to zero to disable)",
+            "default": "7",
+            "units": "days"
+        },
+        "INVENTREE_BACKUP_ENABLE": {
+            "name": "Automatic Backup",
+            "description": "Enable automatic backup of database and media files",
+            "default": "False",
+            "units": ""
+        },
+        "INVENTREE_BACKUP_DAYS": {
+            "name": "Auto Backup Interval",
+            "description": "Specify number of days between automated backup events",
+            "default": "1",
+            "units": "days"
+        },
+        "INVENTREE_DELETE_TASKS_DAYS": {
+            "name": "Task Deletion Interval",
+            "description": "Background task results will be deleted after specified number of days",
+            "default": "30",
+            "units": "days"
+        },
+        "INVENTREE_DELETE_ERRORS_DAYS": {
+            "name": "Error Log Deletion Interval",
+            "description": "Error logs will be deleted after specified number of days",
+            "default": "30",
+            "units": "days"
+        },
+        "INVENTREE_DELETE_NOTIFICATIONS_DAYS": {
+            "name": "Notification Deletion Interval",
+            "description": "User notifications will be deleted after specified number of days",
+            "default": "30",
+            "units": "days"
+        },
+        "BARCODE_ENABLE": {
+            "name": "Barcode Support",
+            "description": "Enable barcode scanner support in the web interface",
+            "default": "True",
+            "units": ""
+        },
+        "BARCODE_STORE_RESULTS": {
+            "name": "Store Barcode Results",
+            "description": "Store barcode scan results in the database",
+            "default": "False",
+            "units": ""
+        },
+        "BARCODE_RESULTS_MAX_NUM": {
+            "name": "Barcode Scans Maximum Count",
+            "description": "Maximum number of barcode scan results to store",
+            "default": "100",
+            "units": ""
+        },
+        "BARCODE_INPUT_DELAY": {
+            "name": "Barcode Input Delay",
+            "description": "Barcode input processing delay time",
+            "default": "50",
+            "units": "ms"
+        },
+        "BARCODE_WEBCAM_SUPPORT": {
+            "name": "Barcode Webcam Support",
+            "description": "Allow barcode scanning via webcam in browser",
+            "default": "True",
+            "units": ""
+        },
+        "BARCODE_SHOW_TEXT": {
+            "name": "Barcode Show Data",
+            "description": "Display barcode data in browser as text",
+            "default": "False",
+            "units": ""
+        },
+        "BARCODE_GENERATION_PLUGIN": {
+            "name": "Barcode Generation Plugin",
+            "description": "Plugin to use for internal barcode data generation",
+            "default": "inventreebarcode",
+            "units": ""
+        },
+        "PART_ENABLE_REVISION": {
+            "name": "Part Revisions",
+            "description": "Enable revision field for Part",
+            "default": "True",
+            "units": ""
+        },
+        "PART_REVISION_ASSEMBLY_ONLY": {
+            "name": "Assembly Revision Only",
+            "description": "Only allow revisions for assembly parts",
+            "default": "False",
+            "units": ""
+        },
+        "PART_ALLOW_DELETE_FROM_ASSEMBLY": {
+            "name": "Allow Deletion from Assembly",
+            "description": "Allow deletion of parts which are used in an assembly",
+            "default": "False",
+            "units": ""
+        },
+        "PART_IPN_REGEX": {
+            "name": "IPN Regex",
+            "description": "Regular expression pattern for matching Part IPN",
+            "default": "",
+            "units": ""
+        },
+        "PART_ALLOW_DUPLICATE_IPN": {
+            "name": "Allow Duplicate IPN",
+            "description": "Allow multiple parts to share the same IPN",
+            "default": "True",
+            "units": ""
+        },
+        "PART_ALLOW_EDIT_IPN": {
+            "name": "Allow Editing IPN",
+            "description": "Allow changing the IPN value while editing a part",
+            "default": "True",
+            "units": ""
+        },
+        "PART_COPY_BOM": {
+            "name": "Copy Part BOM Data",
+            "description": "Copy BOM data by default when duplicating a part",
+            "default": "True",
+            "units": ""
+        },
+        "PART_COPY_PARAMETERS": {
+            "name": "Copy Part Parameter Data",
+            "description": "Copy parameter data by default when duplicating a part",
+            "default": "True",
+            "units": ""
+        },
+        "PART_COPY_TESTS": {
+            "name": "Copy Part Test Data",
+            "description": "Copy test data by default when duplicating a part",
+            "default": "True",
+            "units": ""
+        },
+        "PART_CATEGORY_PARAMETERS": {
+            "name": "Copy Category Parameter Templates",
+            "description": "Copy category parameter templates when creating a part",
+            "default": "True",
+            "units": ""
+        },
+        "PART_TEMPLATE": {
+            "name": "Template",
+            "description": "Parts are templates by default",
+            "default": "False",
+            "units": ""
+        },
+        "PART_ASSEMBLY": {
+            "name": "Assembly",
+            "description": "Parts can be assembled from other components by default",
+            "default": "False",
+            "units": ""
+        },
+        "PART_COMPONENT": {
+            "name": "Component",
+            "description": "Parts can be used as sub-components by default",
+            "default": "True",
+            "units": ""
+        },
+        "PART_PURCHASEABLE": {
+            "name": "Purchaseable",
+            "description": "Parts are purchaseable by default",
+            "default": "True",
+            "units": ""
+        },
+        "PART_SALABLE": {
+            "name": "Salable",
+            "description": "Parts are salable by default",
+            "default": "False",
+            "units": ""
+        },
+        "PART_TRACKABLE": {
+            "name": "Trackable",
+            "description": "Parts are trackable by default",
+            "default": "False",
+            "units": ""
+        },
+        "PART_VIRTUAL": {
+            "name": "Virtual",
+            "description": "Parts are virtual by default",
+            "default": "False",
+            "units": ""
+        },
+        "PART_SHOW_IMPORT": {
+            "name": "Show Import in Views",
+            "description": "Display the import wizard in some part views",
+            "default": "False",
+            "units": ""
+        },
+        "PART_SHOW_RELATED": {
+            "name": "Show related parts",
+            "description": "Display related parts for a part",
+            "default": "True",
+            "units": ""
+        },
+        "PART_CREATE_INITIAL": {
+            "name": "Initial Stock Data",
+            "description": "Allow creation of initial stock when adding a new part",
+            "default": "False",
+            "units": ""
+        },
+        "PART_CREATE_SUPPLIER": {
+            "name": "Initial Supplier Data",
+            "description": "Allow creation of initial supplier data when adding a new part",
+            "default": "True",
+            "units": ""
+        },
+        "PART_NAME_FORMAT": {
+            "name": "Part Name Display Format",
+            "description": "Format to display the part name",
+            "default": "{{ part.IPN if part.IPN }}{{ ' | ' if part.IPN }}{{ part.name }}{{ ' | ' if part.revision }}{{ part.revision if part.revision }}",
+            "units": ""
+        },
+        "PART_CATEGORY_DEFAULT_ICON": {
+            "name": "Part Category Default Icon",
+            "description": "Part category default icon (empty means no icon)",
+            "default": "",
+            "units": ""
+        },
+        "PART_PARAMETER_ENFORCE_UNITS": {
+            "name": "Enforce Parameter Units",
+            "description": "If units are provided, parameter values must match the specified units",
+            "default": "True",
+            "units": ""
+        },
+        "PRICING_DECIMAL_PLACES_MIN": {
+            "name": "Minimum Pricing Decimal Places",
+            "description": "Minimum number of decimal places to display when rendering pricing data",
+            "default": "0",
+            "units": ""
+        },
+        "PRICING_DECIMAL_PLACES": {
+            "name": "Maximum Pricing Decimal Places",
+            "description": "Maximum number of decimal places to display when rendering pricing data",
+            "default": "6",
+            "units": ""
+        },
+        "PRICING_USE_SUPPLIER_PRICING": {
+            "name": "Use Supplier Pricing",
+            "description": "Include supplier price breaks in overall pricing calculations",
+            "default": "True",
+            "units": ""
+        },
+        "PRICING_PURCHASE_HISTORY_OVERRIDES_SUPPLIER": {
+            "name": "Purchase History Override",
+            "description": "Historical purchase order pricing overrides supplier price breaks",
+            "default": "False",
+            "units": ""
+        },
+        "PRICING_USE_STOCK_PRICING": {
+            "name": "Use Stock Item Pricing",
+            "description": "Use pricing from manually entered stock data for pricing calculations",
+            "default": "True",
+            "units": ""
+        },
+        "PRICING_STOCK_ITEM_AGE_DAYS": {
+            "name": "Stock Item Pricing Age",
+            "description": "Exclude stock items older than this number of days from pricing calculations",
+            "default": "0",
+            "units": "days"
+        },
+        "PRICING_USE_VARIANT_PRICING": {
+            "name": "Use Variant Pricing",
+            "description": "Include variant pricing in overall pricing calculations",
+            "default": "True",
+            "units": ""
+        },
+        "PRICING_ACTIVE_VARIANTS": {
+            "name": "Active Variants Only",
+            "description": "Only use active variant parts for calculating variant pricing",
+            "default": "False",
+            "units": ""
+        },
+        "PRICING_UPDATE_DAYS": {
+            "name": "Pricing Rebuild Interval",
+            "description": "Number of days before part pricing is automatically updated",
+            "default": "30",
+            "units": "days"
+        },
+        "PART_INTERNAL_PRICE": {
+            "name": "Internal Prices",
+            "description": "Enable internal prices for parts",
+            "default": "False",
+            "units": ""
+        },
+        "PART_BOM_USE_INTERNAL_PRICE": {
+            "name": "Internal Price Override",
+            "description": "If available, internal prices override price range calculations",
+            "default": "False",
+            "units": ""
+        },
+        "LABEL_ENABLE": {
+            "name": "Enable label printing",
+            "description": "Enable label printing from the web interface",
+            "default": "True",
+            "units": ""
+        },
+        "LABEL_DPI": {
+            "name": "Label Image DPI",
+            "description": "DPI resolution when generating image files to supply to label printing plugins",
+            "default": "300",
+            "units": ""
+        },
+        "REPORT_ENABLE": {
+            "name": "Enable Reports",
+            "description": "Enable generation of reports",
+            "default": "False",
+            "units": ""
+        },
+        "REPORT_DEBUG_MODE": {
+            "name": "Debug Mode",
+            "description": "Generate reports in debug mode (HTML output)",
+            "default": "False",
+            "units": ""
+        },
+        "REPORT_LOG_ERRORS": {
+            "name": "Log Report Errors",
+            "description": "Log errors which occur when generating reports",
+            "default": "False",
+            "units": ""
+        },
+        "REPORT_DEFAULT_PAGE_SIZE": {
+            "name": "Page Size",
+            "description": "Default page size for PDF reports",
+            "default": "A4",
+            "units": ""
+        },
+        "SERIAL_NUMBER_GLOBALLY_UNIQUE": {
+            "name": "Globally Unique Serials",
+            "description": "Serial numbers for stock items must be globally unique",
+            "default": "False",
+            "units": ""
+        },
+        "SERIAL_NUMBER_AUTOFILL": {
+            "name": "Autofill Serial Numbers",
+            "description": "Autofill serial numbers in forms",
+            "default": "False",
+            "units": ""
+        },
+        "STOCK_DELETE_DEPLETED_DEFAULT": {
+            "name": "Delete Depleted Stock",
+            "description": "Determines default behavior when a stock item is depleted",
+            "default": "True",
+            "units": ""
+        },
+        "STOCK_BATCH_CODE_TEMPLATE": {
+            "name": "Batch Code Template",
+            "description": "Template for generating default batch codes for stock items",
+            "default": "",
+            "units": ""
+        },
+        "STOCK_ENABLE_EXPIRY": {
+            "name": "Stock Expiry",
+            "description": "Enable stock expiry functionality",
+            "default": "False",
+            "units": ""
+        },
+        "STOCK_ALLOW_EXPIRED_SALE": {
+            "name": "Sell Expired Stock",
+            "description": "Allow sale of expired stock",
+            "default": "False",
+            "units": ""
+        },
+        "STOCK_STALE_DAYS": {
+            "name": "Stock Stale Time",
+            "description": "Number of days stock items are considered stale before expiring",
+            "default": "0",
+            "units": "days"
+        },
+        "STOCK_ALLOW_EXPIRED_BUILD": {
+            "name": "Build Expired Stock",
+            "description": "Allow building with expired stock",
+            "default": "False",
+            "units": ""
+        },
+        "STOCK_OWNERSHIP_CONTROL": {
+            "name": "Stock Ownership Control",
+            "description": "Enable ownership control over stock locations and items",
+            "default": "False",
+            "units": ""
+        },
+        "STOCK_LOCATION_DEFAULT_ICON": {
+            "name": "Stock Location Default Icon",
+            "description": "Stock location default icon (empty means no icon)",
+            "default": "",
+            "units": ""
+        },
+        "STOCK_SHOW_INSTALLED_ITEMS": {
+            "name": "Show Installed Stock Items",
+            "description": "Display installed stock items in stock tables",
+            "default": "False",
+            "units": ""
+        },
+        "STOCK_ENFORCE_BOM_INSTALLATION": {
+            "name": "Check BOM when installing items",
+            "description": "Installed stock items must exist in the BOM for the parent part",
+            "default": "True",
+            "units": ""
+        },
+        "STOCK_ALLOW_OUT_OF_STOCK_TRANSFER": {
+            "name": "Allow Out of Stock Transfer",
+            "description": "Allow stock items which are not in stock to be transferred between stock locations",
+            "default": "False",
+            "units": ""
+        },
+        "BUILDORDER_REFERENCE_PATTERN": {
+            "name": "Build Order Reference Pattern",
+            "description": "Required pattern for generating Build Order reference field",
+            "default": "BO-{ref:04d}",
+            "units": ""
+        },
+        "BUILDORDER_REQUIRE_RESPONSIBLE": {
+            "name": "Require Responsible Owner",
+            "description": "A responsible owner must be assigned to each order",
+            "default": "False",
+            "units": ""
+        },
+        "BUILDORDER_REQUIRE_ACTIVE_PART": {
+            "name": "Require Active Part",
+            "description": "Prevent build order creation for inactive parts",
+            "default": "False",
+            "units": ""
+        },
+        "BUILDORDER_REQUIRE_LOCKED_PART": {
+            "name": "Require Locked Part",
+            "description": "Prevent build order creation for unlocked parts",
+            "default": "False",
+            "units": ""
+        },
+        "BUILDORDER_REQUIRE_VALID_BOM": {
+            "name": "Require Valid BOM",
+            "description": "Prevent build order creation unless BOM has been validated",
+            "default": "False",
+            "units": ""
+        },
+        "BUILDORDER_REQUIRE_CLOSED_CHILDS": {
+            "name": "Require Closed Child Orders",
+            "description": "Prevent build order completion until all child orders are closed",
+            "default": "False",
+            "units": ""
+        },
+        "PREVENT_BUILD_COMPLETION_HAVING_INCOMPLETED_TESTS": {
+            "name": "Block Until Tests Pass",
+            "description": "Prevent build outputs from being completed until all required tests pass",
+            "default": "False",
+            "units": ""
+        },
+        "RETURNORDER_ENABLED": {
+            "name": "Enable Return Orders",
+            "description": "Enable return order functionality in the user interface",
+            "default": "False",
+            "units": ""
+        },
+        "RETURNORDER_REFERENCE_PATTERN": {
+            "name": "Return Order Reference Pattern",
+            "description": "Required pattern for generating Return Order reference field",
+            "default": "RMA-{ref:04d}",
+            "units": ""
+        },
+        "RETURNORDER_REQUIRE_RESPONSIBLE": {
+            "name": "Require Responsible Owner",
+            "description": "A responsible owner must be assigned to each order",
+            "default": "False",
+            "units": ""
+        },
+        "RETURNORDER_EDIT_COMPLETED_ORDERS": {
+            "name": "Edit Completed Return Orders",
+            "description": "Allow editing of return orders after they have been completed",
+            "default": "False",
+            "units": ""
+        },
+        "SALESORDER_REFERENCE_PATTERN": {
+            "name": "Sales Order Reference Pattern",
+            "description": "Required pattern for generating Sales Order reference field",
+            "default": "SO-{ref:04d}",
+            "units": ""
+        },
+        "SALESORDER_REQUIRE_RESPONSIBLE": {
+            "name": "Require Responsible Owner",
+            "description": "A responsible owner must be assigned to each order",
+            "default": "False",
+            "units": ""
+        },
+        "SALESORDER_DEFAULT_SHIPMENT": {
+            "name": "Sales Order Default Shipment",
+            "description": "Enable creation of default shipment with sales orders",
+            "default": "False",
+            "units": ""
+        },
+        "SALESORDER_EDIT_COMPLETED_ORDERS": {
+            "name": "Edit Completed Sales Orders",
+            "description": "Allow editing of sales orders after they have been shipped or completed",
+            "default": "False",
+            "units": ""
+        },
+        "SALESORDER_SHIP_COMPLETE": {
+            "name": "Mark Shipped Orders as Complete",
+            "description": "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status",
+            "default": "False",
+            "units": ""
+        },
+        "PURCHASEORDER_REFERENCE_PATTERN": {
+            "name": "Purchase Order Reference Pattern",
+            "description": "Required pattern for generating Purchase Order reference field",
+            "default": "PO-{ref:04d}",
+            "units": ""
+        },
+        "PURCHASEORDER_REQUIRE_RESPONSIBLE": {
+            "name": "Require Responsible Owner",
+            "description": "A responsible owner must be assigned to each order",
+            "default": "False",
+            "units": ""
+        },
+        "PURCHASEORDER_EDIT_COMPLETED_ORDERS": {
+            "name": "Edit Completed Purchase Orders",
+            "description": "Allow editing of purchase orders after they have been shipped or completed",
+            "default": "False",
+            "units": ""
+        },
+        "PURCHASEORDER_CONVERT_CURRENCY": {
+            "name": "Convert Currency",
+            "description": "Convert item value to base currency when receiving stock",
+            "default": "False",
+            "units": ""
+        },
+        "PURCHASEORDER_AUTO_COMPLETE": {
+            "name": "Auto Complete Purchase Orders",
+            "description": "Automatically mark purchase orders as complete when all line items are received",
+            "default": "True",
+            "units": ""
+        },
+        "LOGIN_ENABLE_PWD_FORGOT": {
+            "name": "Enable password forgot",
+            "description": "Enable password forgot function on the login pages",
+            "default": "True",
+            "units": ""
+        },
+        "LOGIN_ENABLE_REG": {
+            "name": "Enable registration",
+            "description": "Enable self-registration for users on the login pages",
+            "default": "False",
+            "units": ""
+        },
+        "LOGIN_ENABLE_SSO": {
+            "name": "Enable SSO",
+            "description": "Enable SSO on the login pages",
+            "default": "False",
+            "units": ""
+        },
+        "LOGIN_ENABLE_SSO_REG": {
+            "name": "Enable SSO registration",
+            "description": "Enable self-registration via SSO for users on the login pages",
+            "default": "False",
+            "units": ""
+        },
+        "LOGIN_ENABLE_SSO_GROUP_SYNC": {
+            "name": "Enable SSO group sync",
+            "description": "Enable synchronizing InvenTree groups with groups provided by the IdP",
+            "default": "False",
+            "units": ""
+        },
+        "SSO_GROUP_KEY": {
+            "name": "SSO group key",
+            "description": "The name of the groups claim attribute provided by the IdP",
+            "default": "groups",
+            "units": ""
+        },
+        "SSO_GROUP_MAP": {
+            "name": "SSO group map",
+            "description": "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created.",
+            "default": "{}",
+            "units": ""
+        },
+        "SSO_REMOVE_GROUPS": {
+            "name": "Remove groups outside of SSO",
+            "description": "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues",
+            "default": "True",
+            "units": ""
+        },
+        "LOGIN_MAIL_REQUIRED": {
+            "name": "Email required",
+            "description": "Require user to supply mail on signup",
+            "default": "False",
+            "units": ""
+        },
+        "LOGIN_SIGNUP_SSO_AUTO": {
+            "name": "Auto-fill SSO users",
+            "description": "Automatically fill out user-details from SSO account-data",
+            "default": "True",
+            "units": ""
+        },
+        "LOGIN_SIGNUP_MAIL_TWICE": {
+            "name": "Mail twice",
+            "description": "On signup ask users twice for their mail",
+            "default": "False",
+            "units": ""
+        },
+        "LOGIN_SIGNUP_PWD_TWICE": {
+            "name": "Password twice",
+            "description": "On signup ask users twice for their password",
+            "default": "True",
+            "units": ""
+        },
+        "LOGIN_SIGNUP_MAIL_RESTRICTION": {
+            "name": "Allowed domains",
+            "description": "Restrict signup to certain domains (comma-separated, starting with @)",
+            "default": "",
+            "units": ""
+        },
+        "SIGNUP_GROUP": {
+            "name": "Group on signup",
+            "description": "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP.",
+            "default": "",
+            "units": ""
+        },
+        "LOGIN_ENFORCE_MFA": {
+            "name": "Enforce MFA",
+            "description": "Users must use multifactor security.",
+            "default": "False",
+            "units": ""
+        },
+        "PLUGIN_ON_STARTUP": {
+            "name": "Check plugins on startup",
+            "description": "Check that all plugins are installed on startup - enable in container environments",
+            "default": "False",
+            "units": ""
+        },
+        "PLUGIN_UPDATE_CHECK": {
+            "name": "Check for plugin updates",
+            "description": "Enable periodic checks for updates to installed plugins",
+            "default": "True",
+            "units": ""
+        },
+        "ENABLE_PLUGINS_URL": {
+            "name": "Enable URL integration",
+            "description": "Enable plugins to add URL routes",
+            "default": "False",
+            "units": ""
+        },
+        "ENABLE_PLUGINS_NAVIGATION": {
+            "name": "Enable navigation integration",
+            "description": "Enable plugins to integrate into navigation",
+            "default": "False",
+            "units": ""
+        },
+        "ENABLE_PLUGINS_APP": {
+            "name": "Enable app integration",
+            "description": "Enable plugins to add apps",
+            "default": "False",
+            "units": ""
+        },
+        "ENABLE_PLUGINS_SCHEDULE": {
+            "name": "Enable schedule integration",
+            "description": "Enable plugins to run scheduled tasks",
+            "default": "False",
+            "units": ""
+        },
+        "ENABLE_PLUGINS_EVENTS": {
+            "name": "Enable event integration",
+            "description": "Enable plugins to respond to internal events",
+            "default": "False",
+            "units": ""
+        },
+        "ENABLE_PLUGINS_INTERFACE": {
+            "name": "Enable interface integration",
+            "description": "Enable plugins to integrate into the user interface",
+            "default": "False",
+            "units": ""
+        },
+        "PROJECT_CODES_ENABLED": {
+            "name": "Enable project codes",
+            "description": "Enable project codes for tracking projects",
+            "default": "False",
+            "units": ""
+        },
+        "STOCKTAKE_ENABLE": {
+            "name": "Stocktake Functionality",
+            "description": "Enable stocktake functionality for recording stock levels and calculating stock value",
+            "default": "False",
+            "units": ""
+        },
+        "STOCKTAKE_EXCLUDE_EXTERNAL": {
+            "name": "Exclude External Locations",
+            "description": "Exclude stock items in external locations from stocktake calculations",
+            "default": "False",
+            "units": ""
+        },
+        "STOCKTAKE_AUTO_DAYS": {
+            "name": "Automatic Stocktake Period",
+            "description": "Number of days between automatic stocktake recording (set to zero to disable)",
+            "default": "0",
+            "units": ""
+        },
+        "STOCKTAKE_DELETE_REPORT_DAYS": {
+            "name": "Report Deletion Interval",
+            "description": "Stocktake reports will be deleted after specified number of days",
+            "default": "30",
+            "units": "days"
+        },
+        "DISPLAY_FULL_NAMES": {
+            "name": "Display Users full names",
+            "description": "Display Users full names instead of usernames",
+            "default": "False",
+            "units": ""
+        },
+        "DISPLAY_PROFILE_INFO": {
+            "name": "Display User Profiles",
+            "description": "Display Users Profiles on their profile page",
+            "default": "True",
+            "units": ""
+        },
+        "TEST_STATION_DATA": {
+            "name": "Enable Test Station Data",
+            "description": "Enable test station data collection for test results",
+            "default": "False",
+            "units": ""
+        },
+        "TEST_UPLOAD_CREATE_TEMPLATE": {
+            "name": "Create Template on Upload",
+            "description": "Create a new test template when uploading test data which does not match an existing template",
+            "default": "True",
+            "units": ""
+        }
+    },
+    "user": {
+        "LABEL_INLINE": {
+            "name": "Inline label display",
+            "description": "Display PDF labels in the browser, instead of downloading as a file",
+            "default": "True",
+            "units": ""
+        },
+        "LABEL_DEFAULT_PRINTER": {
+            "name": "Default label printer",
+            "description": "Configure which label printer should be selected by default",
+            "default": "",
+            "units": ""
+        },
+        "REPORT_INLINE": {
+            "name": "Inline report display",
+            "description": "Display PDF reports in the browser, instead of downloading as a file",
+            "default": "False",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_SHOW_PARTS": {
+            "name": "Search Parts",
+            "description": "Display parts in search preview window",
+            "default": "True",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_SHOW_SUPPLIER_PARTS": {
+            "name": "Search Supplier Parts",
+            "description": "Display supplier parts in search preview window",
+            "default": "True",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_SHOW_MANUFACTURER_PARTS": {
+            "name": "Search Manufacturer Parts",
+            "description": "Display manufacturer parts in search preview window",
+            "default": "True",
+            "units": ""
+        },
+        "SEARCH_HIDE_INACTIVE_PARTS": {
+            "name": "Hide Inactive Parts",
+            "description": "Excluded inactive parts from search preview window",
+            "default": "False",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_SHOW_CATEGORIES": {
+            "name": "Search Categories",
+            "description": "Display part categories in search preview window",
+            "default": "False",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_SHOW_STOCK": {
+            "name": "Search Stock",
+            "description": "Display stock items in search preview window",
+            "default": "True",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_HIDE_UNAVAILABLE_STOCK": {
+            "name": "Hide Unavailable Stock Items",
+            "description": "Exclude stock items which are not available from the search preview window",
+            "default": "False",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_SHOW_LOCATIONS": {
+            "name": "Search Locations",
+            "description": "Display stock locations in search preview window",
+            "default": "False",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_SHOW_COMPANIES": {
+            "name": "Search Companies",
+            "description": "Display companies in search preview window",
+            "default": "True",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_SHOW_BUILD_ORDERS": {
+            "name": "Search Build Orders",
+            "description": "Display build orders in search preview window",
+            "default": "True",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_SHOW_PURCHASE_ORDERS": {
+            "name": "Search Purchase Orders",
+            "description": "Display purchase orders in search preview window",
+            "default": "True",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_EXCLUDE_INACTIVE_PURCHASE_ORDERS": {
+            "name": "Exclude Inactive Purchase Orders",
+            "description": "Exclude inactive purchase orders from search preview window",
+            "default": "True",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_SHOW_SALES_ORDERS": {
+            "name": "Search Sales Orders",
+            "description": "Display sales orders in search preview window",
+            "default": "True",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_EXCLUDE_INACTIVE_SALES_ORDERS": {
+            "name": "Exclude Inactive Sales Orders",
+            "description": "Exclude inactive sales orders from search preview window",
+            "default": "True",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_SHOW_SALES_ORDER_SHIPMENTS": {
+            "name": "Search Sales Order Shipments",
+            "description": "Display sales order shipments in search preview window",
+            "default": "True",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_SHOW_RETURN_ORDERS": {
+            "name": "Search Return Orders",
+            "description": "Display return orders in search preview window",
+            "default": "True",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_EXCLUDE_INACTIVE_RETURN_ORDERS": {
+            "name": "Exclude Inactive Return Orders",
+            "description": "Exclude inactive return orders from search preview window",
+            "default": "True",
+            "units": ""
+        },
+        "SEARCH_PREVIEW_RESULTS": {
+            "name": "Search Preview Results",
+            "description": "Number of results to show in each section of the search preview window",
+            "default": "10",
+            "units": ""
+        },
+        "SEARCH_REGEX": {
+            "name": "Regex Search",
+            "description": "Enable regular expressions in search queries",
+            "default": "False",
+            "units": ""
+        },
+        "SEARCH_WHOLE": {
+            "name": "Whole Word Search",
+            "description": "Search queries return results for whole word matches",
+            "default": "False",
+            "units": ""
+        },
+        "SEARCH_NOTES": {
+            "name": "Search Notes",
+            "description": "Search queries return results for matches from the item's notes",
+            "default": "False",
+            "units": ""
+        },
+        "PART_SHOW_QUANTITY_IN_FORMS": {
+            "name": "Show Quantity in Forms",
+            "description": "Display available part quantity in some forms",
+            "default": "True",
+            "units": ""
+        },
+        "FORMS_CLOSE_USING_ESCAPE": {
+            "name": "Escape Key Closes Forms",
+            "description": "Use the escape key to close modal forms",
+            "default": "False",
+            "units": ""
+        },
+        "STICKY_HEADER": {
+            "name": "Fixed Navbar",
+            "description": "The navbar position is fixed to the top of the screen",
+            "default": "False",
+            "units": ""
+        },
+        "ICONS_IN_NAVBAR": {
+            "name": "Navigation Icons",
+            "description": "Display icons in the navigation bar",
+            "default": "False",
+            "units": ""
+        },
+        "DATE_DISPLAY_FORMAT": {
+            "name": "Date Format",
+            "description": "Preferred format for displaying dates",
+            "default": "YYYY-MM-DD",
+            "units": ""
+        },
+        "DISPLAY_SCHEDULE_TAB": {
+            "name": "Part Scheduling",
+            "description": "Display part scheduling information",
+            "default": "True",
+            "units": ""
+        },
+        "DISPLAY_STOCKTAKE_TAB": {
+            "name": "Part Stocktake",
+            "description": "Display part stocktake information (if stocktake functionality is enabled)",
+            "default": "True",
+            "units": ""
+        },
+        "TABLE_STRING_MAX_LENGTH": {
+            "name": "Table String Length",
+            "description": "Maximum length limit for strings displayed in table views",
+            "default": "100",
+            "units": ""
+        },
+        "ENABLE_LAST_BREADCRUMB": {
+            "name": "Show Last Breadcrumb",
+            "description": "Show the current page in breadcrumbs",
+            "default": "False",
+            "units": ""
+        },
+        "NOTIFICATION_ERROR_REPORT": {
+            "name": "Receive error reports",
+            "description": "Receive notifications for system errors",
+            "default": "True",
+            "units": ""
+        },
+        "LAST_USED_PRINTING_MACHINES": {
+            "name": "Last used printing machines",
+            "description": "Save the last used printing machines for a user",
+            "default": "",
+            "units": ""
+        }
+    }
+}
\ No newline at end of file
diff --git a/export/341/inventree_tags.yml b/export/341/inventree_tags.yml
new file mode 100644
index 0000000..e1a781e
--- /dev/null
+++ b/export/341/inventree_tags.yml
@@ -0,0 +1,1107 @@
+-   body: ''
+    library: ''
+    meta: {}
+    name: autoescape
+    title: Force autoescape behavior for this block.
+-   body: ''
+    library: ''
+    meta: {}
+    name: comment
+    title: Ignore everything between ``{% comment %}`` and ``{% endcomment %}``.
+-   body: "Within a loop, cycles among the given strings each time through\nthe loop::\n\
+        \n    {% for o in some_list %}\n        <tr class=\"{% cycle 'row1' 'row2'\
+        \ %}\">\n            ...\n        </tr>\n    {% endfor %}\n\nOutside of a\
+        \ loop, give the values a unique name the first time you call\nit, then use\
+        \ that name each successive time through::\n\n        <tr class=\"{% cycle\
+        \ 'row1' 'row2' 'row3' as rowcolors %}\">...</tr>\n        <tr class=\"{%\
+        \ cycle rowcolors %}\">...</tr>\n        <tr class=\"{% cycle rowcolors %}\"\
+        >...</tr>\n\nYou can use any number of values, separated by spaces. Commas\
+        \ can also\nbe used to separate values; if a comma is used, the cycle values\
+        \ are\ninterpreted as literal strings.\n\nThe optional flag \"silent\" can\
+        \ be used to prevent the cycle declaration\nfrom returning any value::\n\n\
+        \    {% for o in some_list %}\n        {% cycle 'row1' 'row2' as rowcolors\
+        \ silent %}\n        <tr class=\"{{ rowcolors }}\">{% include \"subtemplate.html\
+        \ \" %}</tr>\n    {% endfor %}"
+    library: ''
+    meta: {}
+    name: cycle
+    title: Cycle among the given strings each time this tag is encountered.
+-   body: ''
+    library: ''
+    meta: {}
+    name: csrf_token
+    title: ''
+-   body: "Sample usage::\n\n    <pre>\n        {% debug %}\n    </pre>"
+    library: ''
+    meta: {}
+    name: debug
+    title: 'Output a whole load of debugging information, including the current
+
+        context and imported modules.'
+-   body: "Filters can also be piped through each other, and they can have\narguments\
+        \ -- just like in variable syntax.\n\nSample usage::\n\n    {% filter force_escape|lower\
+        \ %}\n        This text will be HTML-escaped, and will appear in lowercase.\n\
+        \    {% endfilter %}\n\nNote that the ``escape`` and ``safe`` filters are\
+        \ not acceptable arguments.\nInstead, use the ``autoescape`` tag to manage\
+        \ autoescaping for blocks of\ntemplate code."
+    library: ''
+    meta: {}
+    name: filter
+    title: Filter the contents of the block through variable filters.
+-   body: "Output nothing if all the passed variables are False.\n\nSample usage::\n\
+        \n    {% firstof var1 var2 var3 as myvar %}\n\nThis is equivalent to::\n\n\
+        \    {% if var1 %}\n        {{ var1 }}\n    {% elif var2 %}\n        {{ var2\
+        \ }}\n    {% elif var3 %}\n        {{ var3 }}\n    {% endif %}\n\nbut much\
+        \ cleaner!\n\nYou can also use a literal string as a fallback value in case\
+        \ all\npassed variables are False::\n\n    {% firstof var1 var2 var3 \"fallback\
+        \ value\" %}\n\nIf you want to disable auto-escaping of variables you can\
+        \ use::\n\n    {% autoescape off %}\n        {% firstof var1 var2 var3 \"\
+        <strong>fallback value</strong>\" %}\n    {% autoescape %}\n\nOr if only some\
+        \ variables should be escaped, you can use::\n\n    {% firstof var1 var2|safe\
+        \ var3 \"<strong>fallback value</strong>\"|safe %}"
+    library: ''
+    meta: {}
+    name: firstof
+    title: Output the first variable passed that is not False.
+-   body: "For example, to display a list of athletes given ``athlete_list``::\n\n\
+        \    <ul>\n    {% for athlete in athlete_list %}\n        <li>{{ athlete.name\
+        \ }}</li>\n    {% endfor %}\n    </ul>\n\nYou can loop over a list in reverse\
+        \ by using\n``{% for obj in list reversed %}``.\n\nYou can also unpack multiple\
+        \ values from a two-dimensional array::\n\n    {% for key,value in dict.items\
+        \ %}\n        {{ key }}: {{ value }}\n    {% endfor %}\n\nThe ``for`` tag\
+        \ can take an optional ``{% empty %}`` clause that will\nbe displayed if the\
+        \ given array is empty or could not be found::\n\n    <ul>\n      {% for athlete\
+        \ in athlete_list %}\n        <li>{{ athlete.name }}</li>\n      {% empty\
+        \ %}\n        <li>Sorry, no athletes in this list.</li>\n      {% endfor %}\n\
+        \    <ul>\n\nThe above is equivalent to -- but shorter, cleaner, and possibly\
+        \ faster\nthan -- the following::\n\n    <ul>\n      {% if athlete_list %}\n\
+        \        {% for athlete in athlete_list %}\n          <li>{{ athlete.name\
+        \ }}</li>\n        {% endfor %}\n      {% else %}\n        <li>Sorry, no athletes\
+        \ in this list.</li>\n      {% endif %}\n    </ul>\n\nThe for loop sets a\
+        \ number of variables available within the loop:\n\n    ==========================\
+        \  ================================================\n    Variable        \
+        \            Description\n    ==========================  ================================================\n\
+        \    ``forloop.counter``         The current iteration of the loop (1-indexed)\n\
+        \    ``forloop.counter0``        The current iteration of the loop (0-indexed)\n\
+        \    ``forloop.revcounter``      The number of iterations from the end of\
+        \ the\n                                loop (1-indexed)\n    ``forloop.revcounter0``\
+        \     The number of iterations from the end of the\n                     \
+        \           loop (0-indexed)\n    ``forloop.first``           True if this\
+        \ is the first time through the loop\n    ``forloop.last``            True\
+        \ if this is the last time through the loop\n    ``forloop.parentloop``  \
+        \    For nested loops, this is the loop \"above\" the\n                  \
+        \              current one\n    ==========================  ================================================"
+    library: ''
+    meta: {}
+    name: for
+    title: Loop over each item in an array.
+-   body: "::\n\n    {% if athlete_list %}\n        Number of athletes: {{ athlete_list|count\
+        \ }}\n    {% elif athlete_in_locker_room_list %}\n        Athletes should\
+        \ be out of the locker room soon!\n    {% else %}\n        No athletes.\n\
+        \    {% endif %}\n\nIn the above, if ``athlete_list`` is not empty, the number\
+        \ of athletes will\nbe displayed by the ``{{ athlete_list|count }}`` variable.\n\
+        \nThe ``if`` tag may take one or several `` {% elif %}`` clauses, as well\
+        \ as\nan ``{% else %}`` clause that will be displayed if all previous conditions\n\
+        fail. These clauses are optional.\n\n``if`` tags may use ``or``, ``and`` or\
+        \ ``not`` to test a number of\nvariables or to negate a given variable::\n\
+        \n    {% if not athlete_list %}\n        There are no athletes.\n    {% endif\
+        \ %}\n\n    {% if athlete_list or coach_list %}\n        There are some athletes\
+        \ or some coaches.\n    {% endif %}\n\n    {% if athlete_list and coach_list\
+        \ %}\n        Both athletes and coaches are available.\n    {% endif %}\n\n\
+        \    {% if not athlete_list or coach_list %}\n        There are no athletes,\
+        \ or there are some coaches.\n    {% endif %}\n\n    {% if athlete_list and\
+        \ not coach_list %}\n        There are some athletes and absolutely no coaches.\n\
+        \    {% endif %}\n\nComparison operators are also available, and the use of\
+        \ filters is also\nallowed, for example::\n\n    {% if articles|length >=\
+        \ 5 %}...{% endif %}\n\nArguments and operators _must_ have a space between\
+        \ them, so\n``{% if 1>2 %}`` is not a valid if tag.\n\nAll supported operators\
+        \ are: ``or``, ``and``, ``in``, ``not in``\n``==``, ``!=``, ``>``, ``>=``,\
+        \ ``<`` and ``<=``.\n\nOperator precedence follows Python."
+    library: ''
+    meta: {}
+    name: if
+    title: 'Evaluate a variable, and if that variable is "true" (i.e., exists, is
+        not
+
+        empty, and is not a false boolean value), output the contents of the block:'
+-   body: "The ``{% ifchanged %}`` block tag is used within a loop. It has two\npossible\
+        \ uses.\n\n1. Check its own rendered contents against its previous state and\
+        \ only\n   displays the content if it has changed. For example, this displays\
+        \ a\n   list of days, only displaying the month if it changes::\n\n      \
+        \  <h1>Archive for {{ year }}</h1>\n\n        {% for date in days %}\n   \
+        \         {% ifchanged %}<h3>{{ date|date:\"F\" }}</h3>{% endifchanged %}\n\
+        \            <a href=\"{{ date|date:\"M/d\"|lower }}/\">{{ date|date:\"j\"\
+        \ }}</a>\n        {% endfor %}\n\n2. If given one or more variables, check\
+        \ whether any variable has changed.\n   For example, the following shows the\
+        \ date every time it changes, while\n   showing the hour if either the hour\
+        \ or the date has changed::\n\n        {% for date in days %}\n          \
+        \  {% ifchanged date.date %} {{ date.date }} {% endifchanged %}\n        \
+        \    {% ifchanged date.hour date.date %}\n                {{ date.hour }}\n\
+        \            {% endifchanged %}\n        {% endfor %}"
+    library: ''
+    meta: {}
+    name: ifchanged
+    title: Check if a value has changed from the last iteration of a loop.
+-   body: "For example, to load the template tags in\n``django/templatetags/news/photos.py``::\n\
+        \n    {% load news.photos %}\n\nCan also be used to load an individual tag/filter\
+        \ from\na library::\n\n    {% load byline from news %}"
+    library: ''
+    meta: {}
+    name: load
+    title: Load a custom template tag library into the parser.
+-   body: "Usage format::\n\n    {% lorem [count] [method] [random] %}\n\n``count``\
+        \ is a number (or variable) containing the number of paragraphs or\nwords\
+        \ to generate (default is 1).\n\n``method`` is either ``w`` for words, ``p``\
+        \ for HTML paragraphs, ``b`` for\nplain-text paragraph blocks (default is\
+        \ ``b``).\n\n``random`` is the word ``random``, which if given, does not use\
+        \ the common\nparagraph (starting \"Lorem ipsum dolor sit amet, consectetuer...\"\
+        ).\n\nExamples:\n\n* ``{% lorem %}`` outputs the common \"lorem ipsum\" paragraph\n\
+        * ``{% lorem 3 p %}`` outputs the common \"lorem ipsum\" paragraph\n  and\
+        \ two random paragraphs each wrapped in HTML ``<p>`` tags\n* ``{% lorem 2\
+        \ w random %}`` outputs two random latin words"
+    library: ''
+    meta: {}
+    name: lorem
+    title: Create random Latin text useful for providing test data in templates.
+-   body: "Use the same format as PHP's ``date()`` function; see https://php.net/date\n\
+        for all the possible values.\n\nSample usage::\n\n    It is {% now \"jS F\
+        \ Y H:i\" %}"
+    library: ''
+    meta: {}
+    name: now
+    title: Display the date, formatted according to the given string.
+-   body: "This complex tag is best illustrated by use of an example: say that\n``musicians``\
+        \ is a list of ``Musician`` objects that have ``name`` and\n``instrument``\
+        \ attributes, and you'd like to display a list that\nlooks like:\n\n    *\
+        \ Guitar:\n        * Django Reinhardt\n        * Emily Remler\n    * Piano:\n\
+        \        * Lovie Austin\n        * Bud Powell\n    * Trumpet:\n        * Duke\
+        \ Ellington\n\nThe following snippet of template code would accomplish this\
+        \ dubious task::\n\n    {% regroup musicians by instrument as grouped %}\n\
+        \    <ul>\n    {% for group in grouped %}\n        <li>{{ group.grouper }}\n\
+        \        <ul>\n            {% for musician in group.list %}\n            <li>{{\
+        \ musician.name }}</li>\n            {% endfor %}\n        </ul>\n    {% endfor\
+        \ %}\n    </ul>\n\nAs you can see, ``{% regroup %}`` populates a variable\
+        \ with a list of\nobjects with ``grouper`` and ``list`` attributes. ``grouper``\
+        \ contains the\nitem that was grouped by; ``list`` contains the list of objects\
+        \ that share\nthat ``grouper``. In this case, ``grouper`` would be ``Guitar``,\
+        \ ``Piano``\nand ``Trumpet``, and ``list`` is the list of musicians who play\
+        \ this\ninstrument.\n\nNote that ``{% regroup %}`` does not work when the\
+        \ list to be grouped is not\nsorted by the key you are grouping by! This means\
+        \ that if your list of\nmusicians was not sorted by instrument, you'd need\
+        \ to make sure it is sorted\nbefore using it, i.e.::\n\n    {% regroup musicians|dictsort:\"\
+        instrument\" by instrument as grouped %}"
+    library: ''
+    meta: {}
+    name: regroup
+    title: Regroup a list of alike objects by a common attribute.
+-   body: 'If an argument is given, reset the last rendered cycle tag whose name
+
+        matches the argument, else reset the last rendered cycle tag (named or
+
+        unnamed).'
+    library: ''
+    meta: {}
+    name: resetcycle
+    title: Reset a cycle tag.
+-   body: "Example usage::\n\n    {% spaceless %}\n        <p>\n            <a href=\"\
+        foo/\">Foo</a>\n        </p>\n    {% endspaceless %}\n\nThis example returns\
+        \ this HTML::\n\n    <p><a href=\"foo/\">Foo</a></p>\n\nOnly space between\
+        \ *tags* is normalized -- not space between tags and text.\nIn this example,\
+        \ the space around ``Hello`` isn't stripped::\n\n    {% spaceless %}\n   \
+        \     <strong>\n            Hello\n        </strong>\n    {% endspaceless\
+        \ %}"
+    library: ''
+    meta: {}
+    name: spaceless
+    title: Remove whitespace between HTML tags, including tab and newline characters.
+-   body: "Since the template system has no concept of \"escaping\", to display one\
+        \ of\nthe bits used in template tags, you must use the ``{% templatetag %}``\
+        \ tag.\n\nThe argument tells which template bit to output:\n\n    ==================\
+        \  =======\n    Argument            Outputs\n    ==================  =======\n\
+        \    ``openblock``       ``{%``\n    ``closeblock``      ``%}``\n    ``openvariable``\
+        \    ``{{``\n    ``closevariable``   ``}}``\n    ``openbrace``       ``{``\n\
+        \    ``closebrace``      ``}``\n    ``opencomment``     ``{#``\n    ``closecomment``\
+        \    ``#}``\n    ==================  ======="
+    library: ''
+    meta: {}
+    name: templatetag
+    title: Output one of the bits used to compose template tags.
+-   body: "This is a way to define links that aren't tied to a particular URL\nconfiguration::\n\
+        \n    {% url \"url_name\" arg1 arg2 %}\n\n    or\n\n    {% url \"url_name\"\
+        \ name1=value1 name2=value2 %}\n\nThe first argument is a URL pattern name.\
+        \ Other arguments are\nspace-separated values that will be filled in place\
+        \ of positional and\nkeyword arguments in the URL. Don't mix positional and\
+        \ keyword arguments.\nAll arguments for the URL must be present.\n\nFor example,\
+        \ if you have a view ``app_name.views.client_details`` taking\nthe client's\
+        \ id and the corresponding line in a URLconf looks like this::\n\n    path('client/<int:id>/',\
+        \ views.client_details, name='client-detail-view')\n\nand this app's URLconf\
+        \ is included into the project's URLconf under some\npath::\n\n    path('clients/',\
+        \ include('app_name.urls'))\n\nthen in a template you can create a link for\
+        \ a certain client like this::\n\n    {% url \"client-detail-view\" client.id\
+        \ %}\n\nThe URL will look like ``/clients/client/123/``.\n\nThe first argument\
+        \ may also be the name of a template variable that will be\nevaluated to obtain\
+        \ the view name or the URL name, e.g.::\n\n    {% with url_name=\"client-detail-view\"\
+        \ %}\n    {% url url_name client.id %}\n    {% endwith %}"
+    library: ''
+    meta: {}
+    name: url
+    title: Return an absolute URL matching the given view with its parameters.
+-   body: "Usage::\n\n    {% verbatim %}\n        {% don't process this %}\n    {%\
+        \ endverbatim %}\n\nYou can also designate a specific closing tag block (allowing\
+        \ the\nunrendered use of ``{% endverbatim %}``)::\n\n    {% verbatim myblock\
+        \ %}\n        ...\n    {% endverbatim myblock %}"
+    library: ''
+    meta: {}
+    name: verbatim
+    title: Stop the template engine from rendering the contents of this block tag.
+-   body: "For example::\n\n    <img src=\"bar.png\" alt=\"Bar\"\n         height=\"\
+        10\" width=\"{% widthratio this_value max_value max_width %}\">\n\nIf ``this_value``\
+        \ is 175, ``max_value`` is 200, and ``max_width`` is 100,\nthe image in the\
+        \ above example will be 88 pixels wide\n(because 175/200 = .875; .875 * 100\
+        \ = 87.5 which is rounded up to 88).\n\nIn some cases you might want to capture\
+        \ the result of widthratio in a\nvariable. It can be useful for instance in\
+        \ a blocktranslate like this::\n\n    {% widthratio this_value max_value max_width\
+        \ as width %}\n    {% blocktranslate %}The width is: {{ width }}{% endblocktranslate\
+        \ %}"
+    library: ''
+    meta: {}
+    name: widthratio
+    title: 'For creating bar charts and such. Calculate the ratio of a given value
+        to a
+
+        maximum value, and then apply that ratio to a constant.'
+-   body: "For example::\n\n    {% with total=person.some_sql_method %}\n        {{\
+        \ total }} object{{ total|pluralize }}\n    {% endwith %}\n\nMultiple values\
+        \ can be added to the context::\n\n    {% with foo=1 bar=2 %}\n        ...\n\
+        \    {% endwith %}\n\nThe legacy format of ``{% with person.some_sql_method\
+        \ as total %}`` is\nstill accepted."
+    library: ''
+    meta: {}
+    name: with
+    title: 'Add one or more values to the context (inside of this block) for caching
+
+        and easy access.'
+-   body: ''
+    library: ''
+    meta: {}
+    name: block
+    title: Define a block that can be overridden by child templates.
+-   body: 'This tag may be used in two ways: ``{% extends "base" %}`` (with quotes)
+
+        uses the literal value "base" as the name of the parent template to extend,
+
+        or ``{% extends variable %}`` uses the value of ``variable`` as either the
+
+        name of the parent template to extend (if it evaluates to a string) or as
+
+        the parent template itself (if it evaluates to a Template object).'
+    library: ''
+    meta: {}
+    name: extends
+    title: Signal that this template extends a parent template.
+-   body: "Example::\n\n    {% include \"foo/some_include\" %}\n    {% include \"\
+        foo/some_include\" with bar=\"BAZZ!\" baz=\"BING!\" %}\n\nUse the ``only``\
+        \ argument to exclude the current context when rendering\nthe included template::\n\
+        \n    {% include \"foo/some_include\" only %}\n    {% include \"foo/some_include\"\
+        \ with bar=\"1\" only %}"
+    library: ''
+    meta: {}
+    name: include
+    title: 'Load a template and render it with the current context. You can pass
+
+        additional context using keyword arguments.'
+-   body: "    {% user_display user %}\n\nor if you need to use in a {% blocktrans\
+        \ %}::\n\n    {% user_display user as user_display %}\n    {% blocktrans %}\n\
+        \    {{ user_display }} has sent you a gift.\n    {% endblocktrans %}"
+    library: account
+    meta: {}
+    name: user_display
+    title: 'Example usage::'
+-   body: ''
+    library: admin_list
+    meta: {}
+    name: paginator_number
+    title: Generate an individual page index link in a paginated list.
+-   body: ''
+    library: admin_list
+    meta: {}
+    name: pagination
+    title: ''
+-   body: ''
+    library: admin_list
+    meta: {}
+    name: result_list
+    title: ''
+-   body: ''
+    library: admin_list
+    meta: {}
+    name: date_hierarchy
+    title: ''
+-   body: ''
+    library: admin_list
+    meta: {}
+    name: search_form
+    title: ''
+-   body: ''
+    library: admin_list
+    meta: {}
+    name: admin_list_filter
+    title: ''
+-   body: ''
+    library: admin_list
+    meta: {}
+    name: admin_actions
+    title: ''
+-   body: ''
+    library: admin_list
+    meta: {}
+    name: change_list_object_tools
+    title: Display the row of change list object tools.
+-   body: ''
+    library: admin_modify
+    meta: {}
+    name: prepopulated_fields_js
+    title: ''
+-   body: ''
+    library: admin_modify
+    meta: {}
+    name: submit_row
+    title: ''
+-   body: ''
+    library: admin_modify
+    meta: {}
+    name: change_form_object_tools
+    title: Display the row of change form object tools.
+-   body: ''
+    library: admin_urls
+    meta: {}
+    name: add_preserved_filters
+    title: ''
+-   body: ''
+    library: allauth
+    meta: {}
+    name: slot
+    title: ''
+-   body: ''
+    library: allauth
+    meta: {}
+    name: element
+    title: ''
+-   body: ''
+    library: allauth
+    meta: {}
+    name: setvar
+    title: ''
+-   body: '- This function runs the data through bleach, and removes any malicious
+        HTML content.
+
+        - Used to render raw barcode data into the rendered HTML templates'
+    library: barcode
+    meta: {}
+    name: clean_barcode
+    title: Return a 'cleaned' string for encoding into a barcode / qrcode.
+-   body: "Arguments:\n    data: Data to encode\n\nKeyword Arguments:\n    version\
+        \ (int): QR code version, (None to auto detect) (default = None)\n    error_correction\
+        \ (str): Error correction level (L: 7%, M: 15%, Q: 25%, H: 30%) (default =\
+        \ 'M')\n    box_size (int): pixel dimensions for one black square pixel in\
+        \ the QR code (default = 20)\n    border (int): count white QR square pixels\
+        \ around the qr code, needed as padding (default = 1)\n    optimize (int):\
+        \ data will be split into multiple chunks of at least this length using different\
+        \ modes (text, alphanumeric, binary) to optimize the QR code size. Set to\
+        \ `0` to disable. (default = 1)\n    format (str): Image format (default =\
+        \ 'PNG')\n    fill_color (str): Fill color (default = \"black\")\n    back_color\
+        \ (str): Background color (default = \"white\")"
+    library: barcode
+    meta:
+        Returns: "\n    image (str): base64 encoded image data"
+    name: qrcode
+    title: Return a byte-encoded QR code image.
+-   body: "Arguments:\n    data: Data to encode\n    barcode_class (str): The type\
+        \ of barcode to generate (default = 'code128')\n\nKeyword Arguments:\n   \
+        \ format (str): Image format (default = 'PNG')\n    fill_color (str): Foreground\
+        \ color (default = 'black')\n    back_color (str): Background color (default\
+        \ = 'white')\n    scale (float): Scaling factor (default = 1)"
+    library: barcode
+    meta:
+        Returns: "\n    image (str): base64 encoded image data"
+    name: barcode
+    title: Render a 1D barcode.
+-   body: "Arguments:\n    data: Data to encode\n\nKeyword Arguments:\n    fill_color\
+        \ (str): Foreground color (default = 'black')\n    back_color (str): Background\
+        \ color (default = 'white')\n    scale (float): Matrix scaling factor (default\
+        \ = 1)\n    border (int): Border width (default = 1)"
+    library: barcode
+    meta:
+        Returns: "\n    image (str): base64 encoded image data"
+    name: datamatrix
+    title: Render a DataMatrix barcode.
+-   body: "Usage::\n\n    {% load cache %}\n    {% cache [expire_time] [fragment_name]\
+        \ %}\n        .. some expensive processing ..\n    {% endcache %}\n\nThis\
+        \ tag also supports varying by a list of arguments::\n\n    {% load cache\
+        \ %}\n    {% cache [expire_time] [fragment_name] [var1] [var2] .. %}\n   \
+        \     .. some expensive processing ..\n    {% endcache %}\n\nOptionally the\
+        \ cache to use may be specified thus::\n\n    {% cache ....  using=\"cachename\"\
+        \ %}\n\nEach unique set of arguments will result in a unique cache entry."
+    library: cache
+    meta: {}
+    name: cache
+    title: 'This will cache the contents of a template fragment for a given amount
+
+        of time.'
+-   body: "    {% money_localize <money_object> [ on(default) | off ] [as var_name]\
+        \ %}\n    {% money_localize <amount> <currency> [ on(default) | off ] [as\
+        \ var_name] %}\n\nExample:\n\n    The same effect:\n    {% money_localize\
+        \ money_object %}\n    {% money_localize money_object on %}\n\n    Assignment\
+        \ to a variable:\n    {% money_localize money_object on as NEW_MONEY_OBJECT\
+        \ %}\n\n    Formatting the number with currency:\n    {% money_localize '4.5'\
+        \ 'USD' %}\n\nReturn::\n\n    Money object"
+    library: djmoney
+    meta: {}
+    name: money_localize
+    title: 'Usage::'
+-   body: ''
+    library: feature_flags
+    meta: {}
+    name: flag_enabled
+    title: ''
+-   body: ''
+    library: feature_flags
+    meta: {}
+    name: flag_disabled
+    title: ''
+-   body: ''
+    library: generic
+    meta: {}
+    name: status_label
+    title: Render a status label.
+-   body: ''
+    library: generic
+    meta: {}
+    name: display_status_label
+    title: Render a status label.
+-   body: "Usage::\n\n    {% get_available_languages as languages %}\n    {% for language\
+        \ in languages %}\n    ...\n    {% endfor %}\n\nThis puts settings.LANGUAGES\
+        \ into the named variable."
+    library: i18n
+    meta: {}
+    name: get_available_languages
+    title: Store a list of available languages in the context.
+-   body: "Usage::\n\n    {% get_language_info for LANGUAGE_CODE as l %}\n    {{ l.code\
+        \ }}\n    {{ l.name }}\n    {{ l.name_translated }}\n    {{ l.name_local }}\n\
+        \    {{ l.bidi|yesno:\"bi-directional,uni-directional\" }}"
+    library: i18n
+    meta: {}
+    name: get_language_info
+    title: 'Store the language information dictionary for the given language code
+        in a
+
+        context variable.'
+-   body: "Usage::\n\n    {% get_language_info_list for LANGUAGES as langs %}\n  \
+        \  {% for l in langs %}\n      {{ l.code }}\n      {{ l.name }}\n      {{\
+        \ l.name_translated }}\n      {{ l.name_local }}\n      {{ l.bidi|yesno:\"\
+        bi-directional,uni-directional\" }}\n    {% endfor %}"
+    library: i18n
+    meta: {}
+    name: get_language_info_list
+    title: 'Store a list of language information dictionaries for the given language
+
+        codes in a context variable. The language codes can be specified either as
+
+        a list of strings or a settings.LANGUAGES style list (or any sequence of
+
+        sequences whose first items are language codes).'
+-   body: "Usage::\n\n    {% get_current_language as language %}\n\nThis fetches the\
+        \ currently active language and puts its value into the\n``language`` context\
+        \ variable."
+    library: i18n
+    meta: {}
+    name: get_current_language
+    title: Store the current language in the context.
+-   body: "Usage::\n\n    {% get_current_language_bidi as bidi %}\n\nThis fetches\
+        \ the currently active language's layout and puts its value into\nthe ``bidi``\
+        \ context variable. True indicates right-to-left layout,\notherwise left-to-right."
+    library: i18n
+    meta: {}
+    name: get_current_language_bidi
+    title: Store the current language layout in the context.
+-   body: "Usage::\n\n    {% translate \"this is a test\" %}\n\nThis marks the string\
+        \ for translation so it will be pulled out by\nmakemessages into the .po files\
+        \ and runs the string through the translation\nengine.\n\nThere is a second\
+        \ form::\n\n    {% translate \"this is a test\" noop %}\n\nThis marks the\
+        \ string for translation, but returns the string unchanged.\nUse it when you\
+        \ need to store values into forms that should be translated\nlater on.\n\n\
+        You can use variables instead of constant strings\nto translate stuff you\
+        \ marked somewhere else::\n\n    {% translate variable %}\n\nThis tries to\
+        \ translate the contents of the variable ``variable``. Make\nsure that the\
+        \ string in there is something that is in the .po file.\n\nIt is possible\
+        \ to store the translated string into a variable::\n\n    {% translate \"\
+        this is a test\" as var %}\n    {{ var }}\n\nContextual translations are also\
+        \ supported::\n\n    {% translate \"this is a test\" context \"greeting\"\
+        \ %}\n\nThis is equivalent to calling pgettext instead of (u)gettext."
+    library: i18n
+    meta: {}
+    name: trans
+    title: 'Mark a string for translation and translate the string for the current
+
+        language.'
+-   body: "Usage::\n\n    {% translate \"this is a test\" %}\n\nThis marks the string\
+        \ for translation so it will be pulled out by\nmakemessages into the .po files\
+        \ and runs the string through the translation\nengine.\n\nThere is a second\
+        \ form::\n\n    {% translate \"this is a test\" noop %}\n\nThis marks the\
+        \ string for translation, but returns the string unchanged.\nUse it when you\
+        \ need to store values into forms that should be translated\nlater on.\n\n\
+        You can use variables instead of constant strings\nto translate stuff you\
+        \ marked somewhere else::\n\n    {% translate variable %}\n\nThis tries to\
+        \ translate the contents of the variable ``variable``. Make\nsure that the\
+        \ string in there is something that is in the .po file.\n\nIt is possible\
+        \ to store the translated string into a variable::\n\n    {% translate \"\
+        this is a test\" as var %}\n    {{ var }}\n\nContextual translations are also\
+        \ supported::\n\n    {% translate \"this is a test\" context \"greeting\"\
+        \ %}\n\nThis is equivalent to calling pgettext instead of (u)gettext."
+    library: i18n
+    meta: {}
+    name: translate
+    title: 'Mark a string for translation and translate the string for the current
+
+        language.'
+-   body: "Usage::\n\n    {% blocktranslate with bar=foo|filter boo=baz|filter %}\n\
+        \    This is {{ bar }} and {{ boo }}.\n    {% endblocktranslate %}\n\nAdditionally,\
+        \ this supports pluralization::\n\n    {% blocktranslate count count=var|length\
+        \ %}\n    There is {{ count }} object.\n    {% plural %}\n    There are {{\
+        \ count }} objects.\n    {% endblocktranslate %}\n\nThis is much like ngettext,\
+        \ only in template syntax.\n\nThe \"var as value\" legacy format is still\
+        \ supported::\n\n    {% blocktranslate with foo|filter as bar and baz|filter\
+        \ as boo %}\n    {% blocktranslate count var|length as count %}\n\nThe translated\
+        \ string can be stored in a variable using `asvar`::\n\n    {% blocktranslate\
+        \ with bar=foo|filter boo=baz|filter asvar var %}\n    This is {{ bar }} and\
+        \ {{ boo }}.\n    {% endblocktranslate %}\n    {{ var }}\n\nContextual translations\
+        \ are supported::\n\n    {% blocktranslate with bar=foo|filter context \"\
+        greeting\" %}\n        This is {{ bar }}.\n    {% endblocktranslate %}\n\n\
+        This is equivalent to calling pgettext/npgettext instead of\n(u)gettext/(u)ngettext."
+    library: i18n
+    meta: {}
+    name: blocktrans
+    title: Translate a block of text with parameters.
+-   body: "Usage::\n\n    {% blocktranslate with bar=foo|filter boo=baz|filter %}\n\
+        \    This is {{ bar }} and {{ boo }}.\n    {% endblocktranslate %}\n\nAdditionally,\
+        \ this supports pluralization::\n\n    {% blocktranslate count count=var|length\
+        \ %}\n    There is {{ count }} object.\n    {% plural %}\n    There are {{\
+        \ count }} objects.\n    {% endblocktranslate %}\n\nThis is much like ngettext,\
+        \ only in template syntax.\n\nThe \"var as value\" legacy format is still\
+        \ supported::\n\n    {% blocktranslate with foo|filter as bar and baz|filter\
+        \ as boo %}\n    {% blocktranslate count var|length as count %}\n\nThe translated\
+        \ string can be stored in a variable using `asvar`::\n\n    {% blocktranslate\
+        \ with bar=foo|filter boo=baz|filter asvar var %}\n    This is {{ bar }} and\
+        \ {{ boo }}.\n    {% endblocktranslate %}\n    {{ var }}\n\nContextual translations\
+        \ are supported::\n\n    {% blocktranslate with bar=foo|filter context \"\
+        greeting\" %}\n        This is {{ bar }}.\n    {% endblocktranslate %}\n\n\
+        This is equivalent to calling pgettext/npgettext instead of\n(u)gettext/(u)ngettext."
+    library: i18n
+    meta: {}
+    name: blocktranslate
+    title: Translate a block of text with parameters.
+-   body: "Usage::\n\n    {% language \"de\" %}\n        This is {{ bar }} and {{\
+        \ boo }}.\n    {% endlanguage %}"
+    library: i18n
+    meta: {}
+    name: language
+    title: Enable the given language just for this block.
+-   body: 'Use as follows: {% define "hello_world" as hello %}'
+    library: inventree_extras
+    meta:
+        Ref: https://stackoverflow.com/questions/1070398/how-to-set-a-value-of-a-variable-inside-a-template-code
+    name: define
+    title: Shortcut function to overcome the shortcomings of the django templating
+        language.
+-   body: ''
+    library: inventree_extras
+    meta: {}
+    name: decimal
+    title: Simplified rendering of a decimal number.
+-   body: ''
+    library: inventree_extras
+    meta: {}
+    name: render_date
+    title: Renders a date object as a string.
+-   body: ''
+    library: inventree_extras
+    meta: {}
+    name: str2bool
+    title: Convert a string to a boolean value.
+-   body: ''
+    library: inventree_extras
+    meta: {}
+    name: add
+    title: Add two numbers together.
+-   body: ''
+    library: inventree_extras
+    meta: {}
+    name: to_list
+    title: Return the input arguments as list.
+-   body: ''
+    library: inventree_extras
+    meta: {}
+    name: inventree_instance_name
+    title: Return the InstanceName associated with the current database.
+-   body: ''
+    library: inventree_extras
+    meta: {}
+    name: inventree_title
+    title: Return the title for the current instance - respecting the settings.
+-   body: Returns a path to an image file, which can be rendered in the web interface.
+    library: inventree_extras
+    meta: {}
+    name: inventree_logo
+    title: Return the InvenTree logo, *or* a custom logo if the user has provided
+        one.
+-   body: ''
+    library: inventree_extras
+    meta: {}
+    name: inventree_version
+    title: Return InvenTree version string.
+-   body: ''
+    library: inventree_extras
+    meta: {}
+    name: inventree_commit_hash
+    title: Return InvenTree git commit hash string.
+-   body: ''
+    library: inventree_extras
+    meta: {}
+    name: inventree_installer
+    title: Return InvenTree package installer string.
+-   body: ''
+    library: inventree_extras
+    meta: {}
+    name: inventree_commit_date
+    title: Return InvenTree git commit date string.
+-   body: '(Or return None if the setting does not exist)
+
+        if a user-setting was requested return that'
+    library: inventree_extras
+    meta: {}
+    name: setting_object
+    title: Return a setting object specified by the given key.
+-   body: ''
+    library: inventree_extras
+    meta: {}
+    name: settings_value
+    title: Return a settings value specified by the given key.
+-   body: ''
+    library: inventree_extras
+    meta: {}
+    name: inventree_customize
+    title: Return customization values for the user interface.
+-   body: "Sample usage::\n\n    {% localize off %}\n        var pi = {{ 3.1415 }};\n\
+        \    {% endlocalize %}"
+    library: l10n
+    meta: {}
+    name: localize
+    title: 'Force or prevents localization of values, regardless of the value of
+
+        `settings.USE_L10N`.'
+-   body: "Usage::\n\n    {% get_admin_log [limit] as [varname] for_user [context_var_with_user_obj]\
+        \ %}\n\nExamples::\n\n    {% get_admin_log 10 as admin_log for_user 23 %}\n\
+        \    {% get_admin_log 10 as admin_log for_user user %}\n    {% get_admin_log\
+        \ 10 as admin_log %}\n\nNote that ``context_var_containing_user_obj`` can\
+        \ be a hard-coded integer\n(user ID) or the name of a template context variable\
+        \ containing the user\nobject whose ID you want."
+    library: log
+    meta: {}
+    name: get_admin_log
+    title: Populate a template variable with the admin log for the given criteria.
+-   body: ''
+    library: markdownify
+    meta: {}
+    name: markdownify
+    title: ''
+-   body: ''
+    library: mptt_admin
+    meta: {}
+    name: mptt_result_list
+    title: Displays the headers and data list together
+-   body: "Usage::\n\n   {% full_tree_for_model [model] as [varname] %}\n\nThe model\
+        \ is specified in ``[appname].[modelname]`` format.\n\nExample::\n\n   {%\
+        \ full_tree_for_model tests.Genre as genres %}"
+    library: mptt_tags
+    meta: {}
+    name: full_tree_for_model
+    title: 'Populates a template variable with a ``QuerySet`` containing the
+
+        full tree for a given model.'
+-   body: "A drilldown tree consists of a node's ancestors, itself and its\nimmediate\
+        \ children or all descendants. For example, a drilldown tree\nfor a book category\
+        \ \"Personal Finance\" might look something like::\n\n   Books\n      Business,\
+        \ Finance & Law\n         Personal Finance\n            Budgeting (220)\n\
+        \            Financial Planning (670)\n\nUsage::\n\n   {% drilldown_tree_for_node\
+        \ [node] as [varname] %}\n\nExtended usage::\n\n   {% drilldown_tree_for_node\
+        \ [node] as [varname] all_descendants %}\n   {% drilldown_tree_for_node [node]\
+        \ as [varname] count [foreign_key] in [count_attr] %}\n   {% drilldown_tree_for_node\
+        \ [node] as [varname] cumulative count [foreign_key] in [count_attr] %}\n\n\
+        The foreign key is specified in ``[appname].[modelname].[fieldname]``\nformat,\
+        \ where ``fieldname`` is the name of a field in the specified\nmodel which\
+        \ relates it to the given node's model.\n\nWhen this form is used, a ``count_attr``\
+        \ attribute on each child of\nthe given node in the drilldown tree will contain\
+        \ a count of the\nnumber of items associated with it through the given foreign\
+        \ key.\n\nIf cumulative is also specified, this count will be for items\n\
+        related to the child node and all of its descendants.\n\nExamples::\n\n  \
+        \ {% drilldown_tree_for_node genre as drilldown %}\n   {% drilldown_tree_for_node\
+        \ genre as drilldown count tests.Game.genre in game_count %}\n   {% drilldown_tree_for_node\
+        \ genre as drilldown cumulative count tests.Game.genre in game_count %}"
+    library: mptt_tags
+    meta: {}
+    name: drilldown_tree_for_node
+    title: 'Populates a template variable with the drilldown tree for a given
+
+        node, optionally counting the number of items associated with its
+
+        children.'
+-   body: ''
+    library: mptt_tags
+    meta:
+        Usage: "\n        <ul>\n            {% recursetree nodes %}\n            \
+            \    <li>\n                    {{ node.name }}\n                    {%\
+            \ if not node.is_leaf_node %}\n                        <ul>\n        \
+            \                    {{ children }}\n                        </ul>\n \
+            \                   {% endif %}\n                </li>\n            {%\
+            \ endrecursetree %}\n        </ul>"
+    name: recursetree
+    title: 'Iterates over the nodes in the tree, and renders the contained block for
+        each node.
+
+        This tag will recursively render children into the template variable {{ children
+        }}.
+
+        Only one database query is required (children are cached for the whole tree)'
+-   body: ''
+    library: plugin_extras
+    meta: {}
+    name: plugin_list
+    title: List of all installed plugins.
+-   body: ''
+    library: plugin_extras
+    meta: {}
+    name: inactive_plugin_list
+    title: List of all inactive plugins.
+-   body: ''
+    library: plugin_extras
+    meta: {}
+    name: plugin_settings
+    title: List of all settings for the plugin.
+-   body: ''
+    library: plugin_extras
+    meta: {}
+    name: mixin_enabled
+    title: Is the mixin registered and configured in the plugin?
+-   body: ''
+    library: plugin_extras
+    meta: {}
+    name: mixin_available
+    title: Returns True if there is at least one active plugin which supports the
+        provided mixin.
+-   body: Returns None if not found
+    library: plugin_extras
+    meta: {}
+    name: safe_url
+    title: Safe lookup fnc for URLs.
+-   body: "Arguments:\n    queryset: The queryset to filter\n\nKeyword Arguments:\n\
+        \    field (any): Filter the queryset based on the provided field"
+    library: report
+    meta:
+        Example: "\n    {% filter_queryset companies is_supplier=True as suppliers\
+            \ %}"
+    name: filter_queryset
+    title: Filter a database queryset based on the provided keyword arguments.
+-   body: "Arguments:\n    model_name: The name of the Django model - including app\
+        \ name (e.g. 'part.partcategory')\n\nKeyword Arguments:\n    field (any):\
+        \ Filter the queryset based on the provided field"
+    library: report
+    meta:
+        Example: "\n    {% filter_db_model 'part.partcategory' is_template=True as\
+            \ template_parts %}"
+    name: filter_db_model
+    title: Filter a database model based on the provided keyword arguments.
+-   body: This function is provideed to get around template rendering limitations.
+    library: report
+    meta:
+        Arguments: "\n    container: A python list object\n    index: The index to\
+            \ retrieve from the list"
+    name: getindex
+    title: Return the value contained at the specified index of the list.
+-   body: 'This function is provided to get around template rendering limitations.
+
+        Ref: https://stackoverflow.com/questions/1906129/dict-keys-with-spaces-in-django-templates'
+    library: report
+    meta:
+        Arguments: "\n    container: A python dict object\n    key: The 'key' to be\
+            \ found within the dict\n    backup_value: A backup value to return if\
+            \ the key is not found"
+    name: getkey
+    title: Perform key lookup in the provided dict object.
+-   body: "Arguments:\n    filename: Asset filename (relative to the 'assets' media\
+        \ directory)"
+    library: report
+    meta:
+        Raises: "\n    FileNotFoundError: If file does not exist"
+    name: asset
+    title: Return fully-qualified path for an upload report asset file.
+-   body: "Arguments:\n    filename: The filename of the image relative to the MEDIA_ROOT\
+        \ directory\n    replace_missing: Optionally return a placeholder image if\
+        \ the provided filename does not exist (default = True)\n    replacement_file:\
+        \ The filename of the placeholder image (default = 'blank_image.png')\n  \
+        \  validate: Optionally validate that the file is a valid image file\n   \
+        \ width: Optional width of the image\n    height: Optional height of the image\n\
+        \    rotate: Optional rotation to apply to the image\n\nReturns:\n    Binary\
+        \ image data to be rendered directly in a <img> tag"
+    library: report
+    meta:
+        Raises: "\n    FileNotFoundError: If the file does not exist"
+    name: uploaded_image
+    title: Return raw image data from an 'uploaded' image.
+-   body: ''
+    library: report
+    meta: {}
+    name: encode_svg_image
+    title: Return a base64-encoded svg image data string.
+-   body: "Arguments:\n    part: A Part model instance\n    preview: Return the preview\
+        \ image (default = False)\n    thumbnail: Return the thumbnail image (default\
+        \ = False)"
+    library: report
+    meta:
+        Raises: "\n    TypeError: If provided part is not a Part instance"
+    name: part_image
+    title: Return a fully-qualified path for a part image.
+-   body: "Arguments:\n    part: A Part object\n    parameter_name: The name of the\
+        \ parameter to retrieve"
+    library: report
+    meta:
+        Returns: "\n    A PartParameter object, or None if not found"
+    name: part_parameter
+    title: Return a PartParameter object for the given part and parameter name.
+-   body: "Arguments:\n    company: A Company model instance\n    preview: Return\
+        \ the preview image (default = False)\n    thumbnail: Return the thumbnail\
+        \ image (default = False)"
+    library: report
+    meta:
+        Raises: "\n    TypeError: If provided company is not a Company instance"
+    name: company_image
+    title: Return a fully-qualified path for a company image.
+-   body: '- If a custom logo has been provided, return a path to that logo
+
+        - Otherwise, return a path to the default InvenTree logo'
+    library: report
+    meta: {}
+    name: logo_image
+    title: Return a fully-qualified path for the logo image.
+-   body: Uses the InvenTree.helpers_model.construct_absolute_url function to build
+        the URL.
+    library: report
+    meta: {}
+    name: internal_link
+    title: Make a <a></a> href which points to an InvenTree URL.
+-   body: ''
+    library: report
+    meta: {}
+    name: add
+    title: Add two numbers together.
+-   body: ''
+    library: report
+    meta: {}
+    name: subtract
+    title: Subtract one number from another.
+-   body: ''
+    library: report
+    meta: {}
+    name: multiply
+    title: Multiply two numbers together.
+-   body: ''
+    library: report
+    meta: {}
+    name: divide
+    title: Divide one number by another.
+-   body: ''
+    library: report
+    meta: {}
+    name: render_currency
+    title: Render a currency / Money object.
+-   body: ''
+    library: report
+    meta:
+        kwargs: "\n    bold: Boolean, whether bold (or not)\n    italic: Boolean,\
+            \ whether italic (or not)\n    heading: str, heading level e.g. 'h3'"
+    name: render_html_text
+    title: Render a text item with some simple html tags.
+-   body: ''
+    library: report
+    meta:
+        Arguments: "\n    number: The number to be formatted\n    decimal_places:\
+            \ Number of decimal places to render\n    integer: Boolean, whether to\
+            \ render the number as an integer\n    leading: Number of leading zeros\
+            \ (default = 0)\n    separator: Character to use as a thousands separator\
+            \ (default = None)"
+    name: format_number
+    title: Render a number with optional formatting options.
+-   body: ''
+    library: report
+    meta:
+        Arguments: "\n    dt: The datetime object to format\n    timezone: The timezone\
+            \ to use for the date (defaults to the server timezone)\n    fmt: The\
+            \ format string to use (defaults to ISO formatting)"
+    name: format_datetime
+    title: Format a datetime object for display.
+-   body: ''
+    library: report
+    meta:
+        Arguments: "\n    dt: The date to format\n    timezone: The timezone to use\
+            \ for the date (defaults to the server timezone)\n    fmt: The format\
+            \ string to use (defaults to ISO formatting)"
+    name: format_date
+    title: Format a date object for display.
+-   body: "Arguments:\n    name: The name of the icon to render\n\nKeyword Arguments:\n\
+        \    class: Optional class name(s) to apply to the icon element"
+    library: report
+    meta: {}
+    name: icon
+    title: Render an icon from the icon packs.
+-   body: ''
+    library: report
+    meta: {}
+    name: include_icon_fonts
+    title: Return the CSS font-face rule for the icon fonts used on the current page
+        (or all).
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: code
+    title: ''
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: form_for_link
+    title: ''
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: render_markdown
+    title: ''
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: get_pagination_html
+    title: ''
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: render_form
+    title: ''
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: render_field
+    title: ''
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: optional_login
+    title: Include a login snippet if REST framework's login view is in the URLconf.
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: optional_docs_login
+    title: Include a login snippet if REST framework's login view is in the URLconf.
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: optional_logout
+    title: Include a logout snippet if REST framework's logout view is in the URLconf.
+-   body: ''
+    library: rest_framework
+    meta: {}
+    name: add_query_param
+    title: Add a query parameter to the current request url, and return the new url.
+-   body: ''
+    library: socialaccount
+    meta: {}
+    name: provider_login_url
+    title: '{% provider_login_url "facebook" next=bla %}
+
+        {% provider_login_url "openid" openid="http://me.yahoo.com" next=bla %}'
+-   body: ''
+    library: socialaccount
+    meta: {}
+    name: providers_media_js
+    title: ''
+-   body: ''
+    library: socialaccount
+    meta:
+        Then: "\n    {{accounts.twitter}} -- a list of connected Twitter accounts\n\
+            \    {{accounts.twitter.0}} -- the first Twitter account\n    {% if accounts\
+            \ %} -- if there is at least one social account"
+    name: get_social_accounts
+    title: '{% get_social_accounts user as accounts %}'
+-   body: 'Usage: `{% get_providers as socialaccount_providers %}`.
+
+
+        Then within the template context, `socialaccount_providers` will hold
+
+        a list of social providers configured for the current site.'
+    library: socialaccount
+    meta: {}
+    name: get_providers
+    title: Returns a list of social authentication providers.
+-   body: ''
+    library: spa_helper
+    meta: {}
+    name: spa_bundle
+    title: Render SPA bundle.
+-   body: ''
+    library: spa_helper
+    meta: {}
+    name: spa_settings
+    title: Render settings for spa.
+-   body: "Usage::\n\n    {% get_static_prefix [as varname] %}\n\nExamples::\n\n \
+        \   {% get_static_prefix %}\n    {% get_static_prefix as static_prefix %}"
+    library: static
+    meta: {}
+    name: get_static_prefix
+    title: 'Populate a template variable with the static prefix,
+
+        ``settings.STATIC_URL``.'
+-   body: "Usage::\n\n    {% get_media_prefix [as varname] %}\n\nExamples::\n\n  \
+        \  {% get_media_prefix %}\n    {% get_media_prefix as media_prefix %}"
+    library: static
+    meta: {}
+    name: get_media_prefix
+    title: 'Populate a template variable with the media prefix,
+
+        ``settings.MEDIA_URL``.'
+-   body: "Usage::\n\n    {% static path [as varname] %}\n\nExamples::\n\n    {% static\
+        \ \"myapp/css/base.css\" %}\n    {% static variable_with_path %}\n    {% static\
+        \ \"myapp/css/base.css\" as admin_base_css %}\n    {% static variable_with_path\
+        \ as varname %}"
+    library: static
+    meta: {}
+    name: static
+    title: Join the given path with the STATIC_URL setting.
+-   body: "Sample usage::\n\n    {% localtime off %}{{ value_in_utc }}{% endlocaltime\
+        \ %}"
+    library: tz
+    meta: {}
+    name: localtime
+    title: 'Force or prevent conversion of datetime objects to local time,
+
+        regardless of the value of ``settings.USE_TZ``.'
+-   body: "The ``timezone`` argument must be an instance of a ``tzinfo`` subclass,\
+        \ a\ntime zone name, or ``None``. If it is ``None``, the default time zone\
+        \ is\nused within the block.\n\nSample usage::\n\n    {% timezone \"Europe/Paris\"\
+        \ %}\n        It is {{ now }} in Paris.\n    {% endtimezone %}"
+    library: tz
+    meta: {}
+    name: timezone
+    title: Enable a given time zone just for this block.
+-   body: "Usage::\n\n    {% get_current_timezone as TIME_ZONE %}\n\nThis will fetch\
+        \ the currently active time zone and put its name\ninto the ``TIME_ZONE``\
+        \ context variable."
+    library: tz
+    meta: {}
+    name: get_current_timezone
+    title: Store the name of the current time zone in the context.