# Plugin: Spoolman API

The **Spoolman API Plugin** exposes a fully Spoolman-compatible REST API that maps to FilaMan's internal data model. External tools like **Moonraker**, **OctoPrint**, and others can use FilaMan as a **drop-in replacement for Spoolman**. Unlike Spoolman itself, this plugin includes **IP-based access control** — a security layer missing in Spoolman.

**Installation:** → [Admin: Plugin Management](/Docs/En/11-Admin#115-system-plugin-management)

---

## Overview

| Property | Value |
|----------|-------|
| **Plugin Type** | Integration |
| **Author** | FilaMan |
| **Source** | [Fire-Devils/filaman-plugins](https://github.com/Fire-Devils/filaman-plugins) (Registry) |
| **API Path** | `/spoolman/api/v1/` |
| **Capabilities** | Spoolman API v1 compatibility, CRUD operations, CSV/JSON export, IP access control |

---

## What is Spoolman?

[Spoolman](https://github.com/Donkie/Spoolman) is a widely used open-source filament management system for 3D printing. Many tools in the 3D printing ecosystem (e.g. Moonraker, OctoPrint) support the Spoolman API for tracking filament usage and managing spools.

With this plugin, FilaMan can be used instead of Spoolman without needing to reconfigure external tools — they simply speak the same API.

---

## Configuring External Tools

### Moonraker (Klipper)

Add the following to your `moonraker.conf`:

```ini
[spoolman]
server: http://<filaman-host>:8000/spoolman
```

Replace `<filaman-host>` with the IP address or hostname of your FilaMan installation.

### OctoPrint

In the Spoolman plugin settings of OctoPrint, use the URL:

```
http://<filaman-host>:8000/spoolman
```

### Other Tools

Any tool that supports the Spoolman API can be configured with the same URL:

```
http://<filaman-host>:8000/spoolman/api/v1/
```

---

## IP Access Control

The plugin provides **IP-based access control** that lets you restrict which devices are allowed to access the Spoolman API.

### Settings

You can find the settings on the plugin page in the admin area under **Spoolman API**.

| Setting | Description |
|---------|-------------|
| **IP filter enabled** | Toggles IP access control on/off. **Disabled** by default (all IPs allowed). |
| **Allowed IPs** | List of allowed IP addresses or ranges |

### Supported IP Formats

| Format | Example | Description |
|--------|---------|-------------|
| **Wildcard** | `*` | Allow all IPs |
| **Single IP** | `192.168.1.5` | Exact IP address |
| **CIDR range** | `192.168.1.0/24` | Entire subnet |
| **Large range** | `10.0.0.0/8` | Large network range |

> **Note:** When the IP filter is enabled and a non-allowed IP attempts access, the request is rejected with HTTP 403 (Forbidden).

---

## API Endpoints

All Spoolman endpoints are available under the path `/spoolman/api/v1/`:

### System

| Method | Path | Description |
|--------|------|-------------|
| GET | `/info` | API information |
| GET | `/health` | Health check |

### Vendors

| Method | Path | Description |
|--------|------|-------------|
| GET | `/vendor` | List all vendors |
| POST | `/vendor` | Create new vendor |
| GET | `/vendor/{id}` | Get vendor |
| PATCH | `/vendor/{id}` | Update vendor |
| DELETE | `/vendor/{id}` | Delete vendor |

### Filaments

| Method | Path | Description |
|--------|------|-------------|
| GET | `/filament` | List all filaments |
| POST | `/filament` | Create new filament |
| GET | `/filament/{id}` | Get filament |
| PATCH | `/filament/{id}` | Update filament |
| DELETE | `/filament/{id}` | Delete filament |

### Spools

| Method | Path | Description |
|--------|------|-------------|
| GET | `/spool` | List all spools |
| POST | `/spool` | Create new spool |
| GET | `/spool/{id}` | Get spool |
| PATCH | `/spool/{id}` | Update spool |
| DELETE | `/spool/{id}` | Delete spool |
| PUT | `/spool/{id}/use` | Use filament from spool |
| PUT | `/spool/{id}/measure` | Measure spool weight |

### Additional Endpoints

| Method | Path | Description |
|--------|------|-------------|
| GET | `/material` | List material types |
| GET | `/location` | List locations |
| PATCH | `/location/{name}` | Rename location |
| GET | `/setting/{key}` | Get setting |
| POST | `/setting/{key}` | Set setting |

### Export

| Method | Path | Description |
|--------|------|-------------|
| GET | `/export/spools` | Export spools (CSV/JSON) |
| GET | `/export/filaments` | Export filaments (CSV/JSON) |
| GET | `/export/vendors` | Export vendors (CSV/JSON) |
| POST | `/backup` | Create backup |

---

## Data Mapping

Spoolman API terms are mapped internally to the FilaMan data model:

| Spoolman Term | FilaMan Equivalent |
|--------------|-------------------|
| Vendor | Manufacturer |
| Filament | Filament |
| Spool | Spool |
| Location | Location |
| Extra Fields | Custom Fields |

---

← [Back: Plugin: SpoolmanDB Import](/Docs/En/15-Plugin-Spoolmandb) | [Next: More Plugins →](#)
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9