Getting started

This plugin is currently in beta state. It is not recommended to rely on this plugin in production.
This plugin requires an instance with InvenTree 0.13.0 or higher and plugin support.

Adds a general-purpose approval system to InvenTree. It allows users to request approval for certain actions, and for other users to approve or reject those requests. It is designed to be flexible and extensible and can be used to implement a wide range of approval workflows.

The current testing and development focus is on the ability to request approval for orders (especial purchase orders), the plugin by default blocks unapproved POs from being placed.

General information about InvenHost

The InvenHost project aims to provide a set of plugins and service that enhance InvenTree for commercial and enterprise use cases.

Read more about InvenHost in the main project documentation


The plugin adds the Approval model to your instance.
Approvals can be accessed via the Approvals menu item in the navbar or directly via panels on the detail pages of supported models, currently only PurchaseOrder.

Starting an approval

Once you try to place a purchase order, the plugin will check if the order requires approval (using Approval Rules). If so, it will sautomatically start an approval request and assign it to the responsible user/group of the. Once you submit the request, the order will be blocked from being placed until it is approved.

Reacting to an approval request

Once an approval request is created, the responsible user/group will receive a notification via configured channels. They can then react to the request by either approving or rejecting it via the UI. A link to the approval request is also included in the notification. After each change of the approval request, the responsible user/group will receive a notification with the current status of the request and the applicable rules (see Approval Rules) will be evaluated.


Documentation TODO


Approval rules are used to control the behaviour of approvals through the lifecycle.
Most settings for them are exposed in the global plugin settings. The rules are evaluated in order, the first rule that matches the current context is used. If no rule matches, the default is executed.

Rules can currently only be configured via plugins, not via the UI/Api. All rules are applied by default