> For the complete documentation index, see [llms.txt](https://mango-5m.gitbook.io/mango5m-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mango-5m.gitbook.io/mango5m-docs/resources/mango-mdt/configuration/inventory-items.md).

# Inventory Items

The two inventory items Mango MDT uses — bodycam and warrant — with definitions for ox\_inventory, qb-inventory, and ESX.

Mango MDT uses two usable items — plus an optional third if you gate the tablet behind equipment. Add them to whatever inventory your server runs (the bridge — `Config.Bridge.Inventory` — handles the rest).

| Item                    | Name         | Used for                                                                                                                                                                                                                                            |
| ----------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Bodycam                 | `bodycam`    | Using it toggles recording. Configurable as `Config.Bodycam.Item` in `config/bodycam.lua`.                                                                                                                                                          |
| Warrant                 | `warrant`    | Handed to the officer by "Print Warrant"; using it presents the warrant full-screen to everyone nearby. Configurable as `Config.Warrants.print.item`.                                                                                               |
| MDT tablet *(optional)* | `mdt_tablet` | Only needed with [`Config.RequireItem`](/mango5m-docs/resources/mango-mdt/configuration/core-settings.md) enabled — officers must **carry** it to open the MDT. It is never "used", so it needs no usable-item wiring (no ox `server.export` line). |

No item is ever consumed on use — a printed warrant can be shown at ten doors, and a bodycam is reusable hardware.

## Item definitions

{% tabs %}
{% tab title="ox\_inventory" %}
Add to `ox_inventory/data/items.lua`:

```lua
['bodycam'] = {
    label = 'Body Cam',
    weight = 200,
    stack = false,
    close = true,
    server = { export = 'mango_mdt.bodycam' },
},

['warrant'] = {
    label = 'Warrant',
    weight = 5,
    stack = false,     -- each copy carries its own warrantId metadata
    close = true,
    server = { export = 'mango_mdt.warrant' },
},

-- Only if Config.RequireItem is enabled - carried, never used, so no export:
['mdt_tablet'] = {
    label = 'MDT Tablet',
    weight = 1000,
    stack = false,
    close = false,
},
```

{% hint style="danger" %}
The `server = { export = 'mango_mdt.<item>' }` lines are **required** on `bodycam` and `warrant` — that's how ox\_inventory routes item use to the MDT. Without them, using the item does nothing. Restart `ox_inventory` after editing.
{% endhint %}
{% endtab %}

{% tab title="qb-inventory" %}
Add `bodycam` and `warrant` to `qb-core/shared/items.lua` as standard **useable** items (`useable = true`, `unique = true`). The MDT registers the use handlers itself through QBCore — no export wiring needed.

If you enable `Config.RequireItem`, also add `mdt_tablet` as a plain item (`useable = false` is fine — it only needs to be carried).
{% endtab %}

{% tab title="ESX inventory" %}
Insert the items into ESX's `items` table:

```sql
INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES
    ('bodycam', 'Body Cam', 1, 0, 1),
    ('warrant', 'Warrant', 0, 0, 1),
    ('mdt_tablet', 'MDT Tablet', 1, 0, 1); -- only if Config.RequireItem is enabled
```

The MDT registers `bodycam` and `warrant` via `ESX.RegisterUsableItem` automatically; `mdt_tablet` is carried, never used.
{% endtab %}
{% endtabs %}

## Behaviour toggles

* `Config.Bodycam.RequireItem = true` — the `/bodycam` command checks the player actually carries the item. Set `false` (or run `Config.Bridge.Inventory = 'none'`) and the command alone operates the camera — the feature still works on a server with no inventory at all.
* `/givebodycam <serverId>` — admin helper that hands the item over (requires `bodycam.manage`, or the server console).
* `Config.Warrants.print.amount = 1` — copies handed over per print.
