# API設計書

## 1. 概要

本ドキュメントは、InvenTree在庫管理システムのREST APIの設計仕様について記載します。InvenTreeはDjango REST Frameworkを基盤としたRESTful APIを提供しており、在庫管理、部品管理、注文管理、製造管理などの機能をプログラム的に操作できます。

### 1.1 基本情報

| 項目 | 内容 |
|------|------|
| API形式 | RESTful API |
| データ形式 | JSON |
| 認証方式 | Token認証、Basic認証、Session認証 |
| ベースURL | `/api/` |
| APIバージョン | 現在のバージョンはURLに含まれない（将来のバージョニング対応予定） |

### 1.2 共通ヘッダー

| ヘッダー | 必須 | 説明 |
|----------|------|------|
| `Authorization` | Yes（認証が必要なエンドポイント） | `Token <api_token>` または `Basic <credentials>` |
| `Content-Type` | Yes（POST/PUT/PATCH） | `application/json` |
| `Accept` | No | `application/json`（デフォルト） |

### 1.3 認証・認可

InvenTreeは以下の認証方式をサポートしています：

1. **Token認証**: `Authorization: Token <api_token>`
2. **Basic認証**: `Authorization: Basic <base64_encoded_credentials>`
3. **Session認証**: Cookieベースのセッション認証

権限レベル：
- **Read Scope**: 読み取り専用アクセス
- **Admin Scope**: 管理者権限
- **Super Scope**: スーパーユーザー権限

---

## 2. APIエンドポイント一覧

### 2.1 Part（部品）API

部品とその関連情報（カテゴリ、パラメータ、BOM等）を管理するAPIです。

#### 2.1.1 部品カテゴリ

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/part/category/` | カテゴリ一覧を取得 | Required |
| POST | `/api/part/category/` | 新しいカテゴリを作成 | Required |
| GET | `/api/part/category/{id}/` | カテゴリ詳細を取得 | Required |
| PUT/PATCH | `/api/part/category/{id}/` | カテゴリを更新 | Required |
| DELETE | `/api/part/category/{id}/` | カテゴリを削除 | Required |
| GET | `/api/part/category/{id}/tree/` | カテゴリツリーを取得 | Required |
| GET | `/api/part/category/{id}/metadata/` | カテゴリメタデータを取得 | Required |

#### 2.1.2 部品

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/part/` | 部品一覧を取得 | Required |
| POST | `/api/part/` | 新しい部品を作成 | Required |
| GET | `/api/part/{id}/` | 部品詳細を取得 | Required |
| PUT/PATCH | `/api/part/{id}/` | 部品を更新 | Required |
| DELETE | `/api/part/{id}/` | 部品を削除 | Required |
| GET | `/api/part/{id}/metadata/` | 部品メタデータを取得 | Required |
| POST | `/api/part/{id}/copy/` | 部品を複製 | Required |
| GET | `/api/part/{id}/pricing/` | 部品価格情報を取得 | Required |
| GET | `/api/part/{id}/requirements/` | 部品要件を取得 | Required |
| GET | `/api/part/{id}/serial-numbers/` | シリアル番号情報を取得 | Required |
| GET | `/api/part/{id}/stocktake/` | 棚卸情報を取得 | Required |
| GET | `/api/part/{id}/thumbs/` | サムネイル一覧を取得 | Required |

**フィルターパラメータ（GET /api/part/）**:

| パラメータ | 型 | 説明 |
|------------|------|------|
| `category` | integer | カテゴリIDでフィルター |
| `cascade` | boolean | サブカテゴリを含める |
| `active` | boolean | アクティブ状態でフィルター |
| `assembly` | boolean | アセンブリ部品のみ |
| `component` | boolean | コンポーネント部品のみ |
| `trackable` | boolean | 追跡可能部品のみ |
| `virtual` | boolean | 仮想部品のみ |
| `IPN` | string | 内部部品番号で検索 |
| `search` | string | 全文検索 |

**レスポンス例**:

```json
{
  "pk": 1,
  "name": "Resistor 10K",
  "IPN": "RES-10K-0805",
  "description": "10K Ohm 0805 SMD Resistor",
  "category": 5,
  "category_detail": {
    "pk": 5,
    "name": "Resistors",
    "pathstring": "Electronics/Passive/Resistors"
  },
  "active": true,
  "assembly": false,
  "component": true,
  "trackable": false,
  "purchaseable": true,
  "salable": false,
  "virtual": false,
  "units": "pcs",
  "minimum_stock": 100,
  "in_stock": 5000,
  "ordering": 0,
  "building": 0,
  "link": "https://example.com/datasheet.pdf",
  "image": "/media/part_images/resistor.png",
  "thumbnail": "/media/part_images/resistor_thumb.png"
}
```

#### 2.1.3 BOM（部品表）

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/part/bom/` | BOM一覧を取得 | Required |
| POST | `/api/part/bom/` | BOM項目を作成 | Required |
| GET | `/api/part/bom/{id}/` | BOM項目詳細を取得 | Required |
| PUT/PATCH | `/api/part/bom/{id}/` | BOM項目を更新 | Required |
| DELETE | `/api/part/bom/{id}/` | BOM項目を削除 | Required |
| POST | `/api/part/bom/{id}/substitute/` | 代替部品を追加 | Required |
| POST | `/api/part/bom/validate/` | BOMを検証 | Required |

#### 2.1.4 部品パラメータ

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/part/parameter/template/` | パラメータテンプレート一覧 | Required |
| POST | `/api/part/parameter/template/` | テンプレートを作成 | Required |
| GET | `/api/part/parameter/template/{id}/` | テンプレート詳細 | Required |
| PUT/PATCH | `/api/part/parameter/template/{id}/` | テンプレートを更新 | Required |
| DELETE | `/api/part/parameter/template/{id}/` | テンプレートを削除 | Required |
| GET | `/api/part/parameter/` | パラメータ一覧 | Required |
| POST | `/api/part/parameter/` | パラメータを作成 | Required |
| GET | `/api/part/parameter/{id}/` | パラメータ詳細 | Required |
| PUT/PATCH | `/api/part/parameter/{id}/` | パラメータを更新 | Required |
| DELETE | `/api/part/parameter/{id}/` | パラメータを削除 | Required |

#### 2.1.5 部品テスト

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/part/test-template/` | テストテンプレート一覧 | Required |
| POST | `/api/part/test-template/` | テストテンプレートを作成 | Required |
| GET | `/api/part/test-template/{id}/` | テストテンプレート詳細 | Required |
| PUT/PATCH | `/api/part/test-template/{id}/` | テストテンプレートを更新 | Required |
| DELETE | `/api/part/test-template/{id}/` | テストテンプレートを削除 | Required |

---

### 2.2 Stock（在庫）API

在庫アイテムとその位置、移動履歴を管理するAPIです。

#### 2.2.1 在庫ロケーション

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/stock/location/` | ロケーション一覧を取得 | Required |
| POST | `/api/stock/location/` | 新しいロケーションを作成 | Required |
| GET | `/api/stock/location/{id}/` | ロケーション詳細を取得 | Required |
| PUT/PATCH | `/api/stock/location/{id}/` | ロケーションを更新 | Required |
| DELETE | `/api/stock/location/{id}/` | ロケーションを削除 | Required |
| GET | `/api/stock/location/{id}/tree/` | ロケーションツリーを取得 | Required |
| GET | `/api/stock/location/{id}/metadata/` | メタデータを取得 | Required |

#### 2.2.2 在庫アイテム

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/stock/` | 在庫一覧を取得 | Required |
| POST | `/api/stock/` | 新しい在庫を作成 | Required |
| GET | `/api/stock/{id}/` | 在庫詳細を取得 | Required |
| PUT/PATCH | `/api/stock/{id}/` | 在庫を更新 | Required |
| DELETE | `/api/stock/{id}/` | 在庫を削除 | Required |
| GET | `/api/stock/{id}/metadata/` | メタデータを取得 | Required |
| POST | `/api/stock/{id}/assign/` | 在庫を割り当て | Required |
| POST | `/api/stock/{id}/merge/` | 在庫をマージ | Required |
| POST | `/api/stock/{id}/convert/` | 在庫を変換 | Required |
| POST | `/api/stock/{id}/install/` | 在庫をインストール | Required |
| POST | `/api/stock/{id}/uninstall/` | 在庫をアンインストール | Required |
| POST | `/api/stock/{id}/return/` | 在庫を返却 | Required |
| POST | `/api/stock/{id}/serialize/` | シリアル化 | Required |

**フィルターパラメータ（GET /api/stock/）**:

| パラメータ | 型 | 説明 |
|------------|------|------|
| `part` | integer | 部品IDでフィルター |
| `location` | integer | ロケーションIDでフィルター |
| `cascade` | boolean | サブロケーションを含める |
| `in_stock` | boolean | 在庫ありのみ |
| `status` | integer | ステータスでフィルター |
| `batch` | string | バッチコードでフィルター |
| `serial` | string | シリアル番号でフィルター |
| `serialized` | boolean | シリアル化されたもののみ |
| `expired` | boolean | 期限切れのみ |
| `allocated` | boolean | 割り当て済みのみ |
| `search` | string | 全文検索 |

**レスポンス例**:

```json
{
  "pk": 1,
  "part": 1,
  "part_detail": {
    "pk": 1,
    "name": "Resistor 10K",
    "IPN": "RES-10K-0805"
  },
  "location": 3,
  "location_detail": {
    "pk": 3,
    "name": "Shelf A1",
    "pathstring": "Warehouse/Room1/Shelf A1"
  },
  "quantity": 500,
  "serial": null,
  "batch": "BATCH-2024-001",
  "status": 10,
  "status_text": "OK",
  "notes": "Received from supplier",
  "purchase_price": "0.05",
  "purchase_price_currency": "USD",
  "expiry_date": null,
  "updated": "2024-01-15T10:30:00Z",
  "stocktake_date": "2024-01-01T00:00:00Z"
}
```

#### 2.2.3 在庫追跡

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/stock/track/` | 追跡履歴一覧 | Required |
| POST | `/api/stock/track/` | 追跡エントリを作成 | Required |
| GET | `/api/stock/track/{id}/` | 追跡エントリ詳細 | Required |
| PUT/PATCH | `/api/stock/track/{id}/` | 追跡エントリを更新 | Required |
| DELETE | `/api/stock/track/{id}/` | 追跡エントリを削除 | Required |

#### 2.2.4 在庫ステータス

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/stock/status/` | 在庫ステータスコード一覧 | Required |

---

### 2.3 Build（製造）API

製造オーダーと関連プロセスを管理するAPIです。

#### 2.3.1 製造オーダー

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/build/` | 製造オーダー一覧 | Required |
| POST | `/api/build/` | 新しい製造オーダーを作成 | Required |
| GET | `/api/build/{id}/` | 製造オーダー詳細 | Required |
| PUT/PATCH | `/api/build/{id}/` | 製造オーダーを更新 | Required |
| DELETE | `/api/build/{id}/` | 製造オーダーを削除（キャンセル済みのみ） | Required |
| GET | `/api/build/{id}/metadata/` | メタデータを取得 | Required |
| POST | `/api/build/{id}/allocate/` | 在庫を割り当て | Required |
| POST | `/api/build/{id}/auto-allocate/` | 在庫を自動割り当て | Required |
| POST | `/api/build/{id}/unallocate/` | 割り当てを解除 | Required |
| POST | `/api/build/{id}/consume/` | 在庫を消費 | Required |
| POST | `/api/build/{id}/create-output/` | 出力を作成 | Required |
| POST | `/api/build/{id}/complete/` | 出力を完了 | Required |
| POST | `/api/build/{id}/delete-outputs/` | 出力を削除 | Required |
| POST | `/api/build/{id}/scrap-outputs/` | 出力をスクラップ | Required |
| POST | `/api/build/{id}/issue/` | オーダーを発行 | Required |
| POST | `/api/build/{id}/hold/` | オーダーを保留 | Required |
| POST | `/api/build/{id}/finish/` | オーダーを完了 | Required |
| POST | `/api/build/{id}/cancel/` | オーダーをキャンセル | Required |

**フィルターパラメータ（GET /api/build/）**:

| パラメータ | 型 | 説明 |
|------------|------|------|
| `part` | integer | 部品IDでフィルター |
| `status` | integer | ステータスでフィルター |
| `active` | boolean | アクティブなオーダーのみ |
| `outstanding` | boolean | 未完了のオーダーのみ |
| `overdue` | boolean | 期限超過のオーダーのみ |
| `assigned_to_me` | boolean | 自分に割り当てられたもの |
| `parent` | integer | 親オーダーでフィルター |
| `sales_order` | integer | 販売オーダーでフィルター |
| `project_code` | integer | プロジェクトコードでフィルター |
| `search` | string | 全文検索 |

#### 2.3.2 製造ライン

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/build/line/` | 製造ライン一覧 | Required |
| POST | `/api/build/line/` | 製造ラインを作成 | Required |
| GET | `/api/build/line/{id}/` | 製造ライン詳細 | Required |
| PUT/PATCH | `/api/build/line/{id}/` | 製造ラインを更新 | Required |
| DELETE | `/api/build/line/{id}/` | 製造ラインを削除 | Required |

#### 2.3.3 製造アイテム

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/build/item/` | 製造アイテム一覧 | Required |
| POST | `/api/build/item/` | 製造アイテムを作成 | Required |
| GET | `/api/build/item/{id}/` | 製造アイテム詳細 | Required |
| PUT/PATCH | `/api/build/item/{id}/` | 製造アイテムを更新 | Required |
| DELETE | `/api/build/item/{id}/` | 製造アイテムを削除 | Required |
| GET | `/api/build/item/{id}/metadata/` | メタデータを取得 | Required |

#### 2.3.4 製造ステータス

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/build/status/` | 製造ステータスコード一覧 | Required |

---

### 2.4 Order（注文）API

購買オーダー、販売オーダー、返品オーダーを管理するAPIです。

#### 2.4.1 購買オーダー

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/order/po/` | 購買オーダー一覧 | Required |
| POST | `/api/order/po/` | 新しい購買オーダーを作成 | Required |
| GET | `/api/order/po/{id}/` | 購買オーダー詳細 | Required |
| PUT/PATCH | `/api/order/po/{id}/` | 購買オーダーを更新 | Required |
| DELETE | `/api/order/po/{id}/` | 購買オーダーを削除 | Required |
| GET | `/api/order/po/{id}/metadata/` | メタデータを取得 | Required |
| POST | `/api/order/po/{id}/cancel/` | オーダーをキャンセル | Required |
| POST | `/api/order/po/{id}/complete/` | オーダーを完了 | Required |
| POST | `/api/order/po/{id}/issue/` | オーダーを発行 | Required |
| POST | `/api/order/po/{id}/hold/` | オーダーを保留 | Required |
| POST | `/api/order/po/{id}/receive/` | 商品を受領 | Required |

**フィルターパラメータ（GET /api/order/po/）**:

| パラメータ | 型 | 説明 |
|------------|------|------|
| `supplier` | integer | サプライヤーIDでフィルター |
| `status` | integer | ステータスでフィルター |
| `outstanding` | boolean | 未完了のオーダーのみ |
| `overdue` | boolean | 期限超過のオーダーのみ |
| `assigned_to_me` | boolean | 自分に割り当てられたもの |
| `project_code` | integer | プロジェクトコードでフィルター |
| `search` | string | 全文検索 |

#### 2.4.2 購買オーダーライン

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/order/po-line/` | 購買ライン一覧 | Required |
| POST | `/api/order/po-line/` | 購買ラインを作成 | Required |
| GET | `/api/order/po-line/{id}/` | 購買ライン詳細 | Required |
| PUT/PATCH | `/api/order/po-line/{id}/` | 購買ラインを更新 | Required |
| DELETE | `/api/order/po-line/{id}/` | 購買ラインを削除 | Required |
| GET | `/api/order/po-line/{id}/metadata/` | メタデータを取得 | Required |

#### 2.4.3 購買オーダー追加ライン

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/order/po-extra-line/` | 追加ライン一覧 | Required |
| POST | `/api/order/po-extra-line/` | 追加ラインを作成 | Required |
| GET | `/api/order/po-extra-line/{id}/` | 追加ライン詳細 | Required |
| PUT/PATCH | `/api/order/po-extra-line/{id}/` | 追加ラインを更新 | Required |
| DELETE | `/api/order/po-extra-line/{id}/` | 追加ラインを削除 | Required |

#### 2.4.4 販売オーダー

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/order/so/` | 販売オーダー一覧 | Required |
| POST | `/api/order/so/` | 新しい販売オーダーを作成 | Required |
| GET | `/api/order/so/{id}/` | 販売オーダー詳細 | Required |
| PUT/PATCH | `/api/order/so/{id}/` | 販売オーダーを更新 | Required |
| DELETE | `/api/order/so/{id}/` | 販売オーダーを削除 | Required |
| GET | `/api/order/so/{id}/metadata/` | メタデータを取得 | Required |
| POST | `/api/order/so/{id}/cancel/` | オーダーをキャンセル | Required |
| POST | `/api/order/so/{id}/complete/` | オーダーを完了 | Required |
| POST | `/api/order/so/{id}/issue/` | オーダーを発行 | Required |
| POST | `/api/order/so/{id}/hold/` | オーダーを保留 | Required |
| POST | `/api/order/so/{id}/allocate/` | 在庫を割り当て | Required |
| POST | `/api/order/so/{id}/allocate-serials/` | シリアル番号を割り当て | Required |
| GET | `/api/order/so/{id}/shipments/` | 出荷一覧 | Required |

#### 2.4.5 販売オーダーライン

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/order/so-line/` | 販売ライン一覧 | Required |
| POST | `/api/order/so-line/` | 販売ラインを作成 | Required |
| GET | `/api/order/so-line/{id}/` | 販売ライン詳細 | Required |
| PUT/PATCH | `/api/order/so-line/{id}/` | 販売ラインを更新 | Required |
| DELETE | `/api/order/so-line/{id}/` | 販売ラインを削除 | Required |
| GET | `/api/order/so-line/{id}/metadata/` | メタデータを取得 | Required |

#### 2.4.6 出荷

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/order/so/shipment/` | 出荷一覧 | Required |
| POST | `/api/order/so/shipment/` | 出荷を作成 | Required |
| GET | `/api/order/so/shipment/{id}/` | 出荷詳細 | Required |
| PUT/PATCH | `/api/order/so/shipment/{id}/` | 出荷を更新 | Required |
| DELETE | `/api/order/so/shipment/{id}/` | 出荷を削除 | Required |
| POST | `/api/order/so/shipment/{id}/ship/` | 出荷を実行 | Required |

#### 2.4.7 返品オーダー

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/order/ro/` | 返品オーダー一覧 | Required |
| POST | `/api/order/ro/` | 新しい返品オーダーを作成 | Required |
| GET | `/api/order/ro/{id}/` | 返品オーダー詳細 | Required |
| PUT/PATCH | `/api/order/ro/{id}/` | 返品オーダーを更新 | Required |
| DELETE | `/api/order/ro/{id}/` | 返品オーダーを削除 | Required |
| GET | `/api/order/ro/{id}/metadata/` | メタデータを取得 | Required |
| POST | `/api/order/ro/{id}/cancel/` | オーダーをキャンセル | Required |
| POST | `/api/order/ro/{id}/complete/` | オーダーを完了 | Required |
| POST | `/api/order/ro/{id}/issue/` | オーダーを発行 | Required |
| POST | `/api/order/ro/{id}/receive/` | 返品を受領 | Required |

#### 2.4.8 オーダーステータス

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/order/po/status/` | 購買オーダーステータス一覧 | Required |
| GET | `/api/order/so/status/` | 販売オーダーステータス一覧 | Required |
| GET | `/api/order/ro/status/` | 返品オーダーステータス一覧 | Required |

---

### 2.5 Company（会社）API

サプライヤー、顧客、製造元などの会社情報を管理するAPIです。

#### 2.5.1 会社

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/company/` | 会社一覧を取得 | Required |
| POST | `/api/company/` | 新しい会社を作成 | Required |
| GET | `/api/company/{id}/` | 会社詳細を取得 | Required |
| PUT/PATCH | `/api/company/{id}/` | 会社を更新 | Required |
| DELETE | `/api/company/{id}/` | 会社を削除 | Required |
| GET | `/api/company/{id}/metadata/` | メタデータを取得 | Required |

**フィルターパラメータ（GET /api/company/）**:

| パラメータ | 型 | 説明 |
|------------|------|------|
| `is_customer` | boolean | 顧客のみ |
| `is_supplier` | boolean | サプライヤーのみ |
| `is_manufacturer` | boolean | 製造元のみ |
| `active` | boolean | アクティブな会社のみ |
| `search` | string | 全文検索 |

#### 2.5.2 連絡先

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/company/contact/` | 連絡先一覧 | Required |
| POST | `/api/company/contact/` | 連絡先を作成 | Required |
| GET | `/api/company/contact/{id}/` | 連絡先詳細 | Required |
| PUT/PATCH | `/api/company/contact/{id}/` | 連絡先を更新 | Required |
| DELETE | `/api/company/contact/{id}/` | 連絡先を削除 | Required |
| GET | `/api/company/contact/{id}/metadata/` | メタデータを取得 | Required |

#### 2.5.3 住所

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/company/address/` | 住所一覧 | Required |
| POST | `/api/company/address/` | 住所を作成 | Required |
| GET | `/api/company/address/{id}/` | 住所詳細 | Required |
| PUT/PATCH | `/api/company/address/{id}/` | 住所を更新 | Required |
| DELETE | `/api/company/address/{id}/` | 住所を削除 | Required |

#### 2.5.4 サプライヤー部品

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/company/part/` | サプライヤー部品一覧 | Required |
| POST | `/api/company/part/` | サプライヤー部品を作成 | Required |
| GET | `/api/company/part/{id}/` | サプライヤー部品詳細 | Required |
| PUT/PATCH | `/api/company/part/{id}/` | サプライヤー部品を更新 | Required |
| DELETE | `/api/company/part/{id}/` | サプライヤー部品を削除 | Required |
| GET | `/api/company/part/{id}/metadata/` | メタデータを取得 | Required |

#### 2.5.5 製造元部品

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/company/part/manufacturer/` | 製造元部品一覧 | Required |
| POST | `/api/company/part/manufacturer/` | 製造元部品を作成 | Required |
| GET | `/api/company/part/manufacturer/{id}/` | 製造元部品詳細 | Required |
| PUT/PATCH | `/api/company/part/manufacturer/{id}/` | 製造元部品を更新 | Required |
| DELETE | `/api/company/part/manufacturer/{id}/` | 製造元部品を削除 | Required |
| GET | `/api/company/part/manufacturer/{id}/metadata/` | メタデータを取得 | Required |

#### 2.5.6 サプライヤー価格ブレーク

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/company/price-break/` | 価格ブレーク一覧 | Required |
| POST | `/api/company/price-break/` | 価格ブレークを作成 | Required |
| GET | `/api/company/price-break/{id}/` | 価格ブレーク詳細 | Required |
| PUT/PATCH | `/api/company/price-break/{id}/` | 価格ブレークを更新 | Required |
| DELETE | `/api/company/price-break/{id}/` | 価格ブレークを削除 | Required |

---

### 2.6 User（ユーザー）API

ユーザー、グループ、権限を管理するAPIです。

#### 2.6.1 ユーザー

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/user/` | ユーザー一覧を取得 | Required |
| POST | `/api/user/` | 新しいユーザーを作成 | Required (Staff) |
| GET | `/api/user/{id}/` | ユーザー詳細を取得 | Required |
| PUT/PATCH | `/api/user/{id}/` | ユーザーを更新 | Required (Staff) |
| DELETE | `/api/user/{id}/` | ユーザーを削除 | Required (Staff) |
| PUT | `/api/user/{id}/set-password/` | パスワードを設定 | Required (Superuser) |
| GET | `/api/user/me/` | 現在のユーザー情報 | Required |
| PUT/PATCH | `/api/user/me/` | 現在のユーザーを更新 | Required |
| GET | `/api/user/profile/` | ユーザープロファイル | Required |
| PUT/PATCH | `/api/user/profile/` | プロファイルを更新 | Required |
| GET | `/api/user/roles/` | ユーザーのロール一覧 | Required |

**フィルターパラメータ（GET /api/user/）**:

| パラメータ | 型 | 説明 |
|------------|------|------|
| `is_staff` | boolean | スタッフユーザーのみ |
| `is_active` | boolean | アクティブユーザーのみ |
| `is_superuser` | boolean | スーパーユーザーのみ |
| `search` | string | 全文検索 |

#### 2.6.2 グループ

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/user/group/` | グループ一覧 | Required |
| POST | `/api/user/group/` | グループを作成 | Required (Staff) |
| GET | `/api/user/group/{id}/` | グループ詳細 | Required |
| PUT/PATCH | `/api/user/group/{id}/` | グループを更新 | Required (Staff) |
| DELETE | `/api/user/group/{id}/` | グループを削除 | Required (Staff) |

#### 2.6.3 ルールセット

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/user/ruleset/` | ルールセット一覧 | Required |
| GET | `/api/user/ruleset/{id}/` | ルールセット詳細 | Required |
| PUT/PATCH | `/api/user/ruleset/{id}/` | ルールセットを更新 | Required (Staff) |
| DELETE | `/api/user/ruleset/{id}/` | ルールセットを削除 | Required (Staff) |

#### 2.6.4 オーナー

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/user/owner/` | オーナー一覧 | Required |
| GET | `/api/user/owner/{id}/` | オーナー詳細 | Required |

#### 2.6.5 APIトークン

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/user/token/` | トークンを取得/生成 | Required |
| GET | `/api/user/tokens/` | トークン一覧 | Required |
| POST | `/api/user/tokens/` | トークンを作成 | Required |
| GET | `/api/user/tokens/{id}/` | トークン詳細 | Required |
| DELETE | `/api/user/tokens/{id}/` | トークンを無効化 | Required |

---

### 2.7 Common（共通）API

共通設定、通知、添付ファイルなどを管理するAPIです。

#### 2.7.1 設定

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/settings/global/` | グローバル設定一覧 | Required (Staff) |
| GET | `/api/settings/global/{key}/` | グローバル設定詳細 | Required (Staff) |
| PUT/PATCH | `/api/settings/global/{key}/` | グローバル設定を更新 | Required (Staff) |
| GET | `/api/settings/user/` | ユーザー設定一覧 | Required |
| GET | `/api/settings/user/{key}/` | ユーザー設定詳細 | Required |
| PUT/PATCH | `/api/settings/user/{key}/` | ユーザー設定を更新 | Required |

#### 2.7.2 通知

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/notifications/` | 通知一覧 | Required |
| GET | `/api/notifications/{id}/` | 通知詳細 | Required |
| PUT/PATCH | `/api/notifications/{id}/` | 通知を更新 | Required |
| DELETE | `/api/notifications/{id}/` | 通知を削除 | Required |
| GET | `/api/notifications/readall/` | 全て既読にする | Required |

#### 2.7.3 添付ファイル

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/attachment/` | 添付ファイル一覧 | Required |
| POST | `/api/attachment/` | 添付ファイルをアップロード | Required |
| GET | `/api/attachment/{id}/` | 添付ファイル詳細 | Required |
| PUT/PATCH | `/api/attachment/{id}/` | 添付ファイルを更新 | Required |
| DELETE | `/api/attachment/{id}/` | 添付ファイルを削除 | Required |
| GET | `/api/attachment/{id}/metadata/` | メタデータを取得 | Required |

#### 2.7.4 プロジェクトコード

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/project-code/` | プロジェクトコード一覧 | Required |
| POST | `/api/project-code/` | プロジェクトコードを作成 | Required (Staff) |
| GET | `/api/project-code/{id}/` | プロジェクトコード詳細 | Required |
| PUT/PATCH | `/api/project-code/{id}/` | プロジェクトコードを更新 | Required (Staff) |
| DELETE | `/api/project-code/{id}/` | プロジェクトコードを削除 | Required (Staff) |
| GET | `/api/project-code/{id}/metadata/` | メタデータを取得 | Required |

#### 2.7.5 カスタム単位

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/units/` | カスタム単位一覧 | Required |
| POST | `/api/units/` | カスタム単位を作成 | Required (Staff) |
| GET | `/api/units/{id}/` | カスタム単位詳細 | Required |
| PUT/PATCH | `/api/units/{id}/` | カスタム単位を更新 | Required (Staff) |
| DELETE | `/api/units/{id}/` | カスタム単位を削除 | Required (Staff) |
| GET | `/api/units/all/` | 全単位一覧 | Required |

#### 2.7.6 通貨

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/currency/exchange/` | 為替レート情報 | Required |
| POST | `/api/currency/refresh/` | 為替レートを更新 | Required (Admin) |

#### 2.7.7 バックグラウンドタスク

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/background-task/` | タスク概要 | Required (Admin) |
| GET | `/api/background-task/pending/` | 保留中タスク一覧 | Required (Admin) |
| GET | `/api/background-task/scheduled/` | スケジュール済みタスク一覧 | Required (Admin) |
| GET | `/api/background-task/failed/` | 失敗タスク一覧 | Required (Admin) |

#### 2.7.8 エラーレポート

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/error-report/` | エラー一覧 | Required (Admin) |
| GET | `/api/error-report/{id}/` | エラー詳細 | Required (Admin) |
| PUT/PATCH | `/api/error-report/{id}/` | エラーを更新 | Required (Admin) |
| DELETE | `/api/error-report/{id}/` | エラーを削除 | Required (Admin) |

#### 2.7.9 ヘルスチェック

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/system/health/` | システムヘルスチェック | No |

---

### 2.8 Report（レポート）/ Label（ラベル）API

レポートとラベルの印刷を管理するAPIです。

#### 2.8.1 レポートテンプレート

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/report/template/` | レポートテンプレート一覧 | Required |
| POST | `/api/report/template/` | テンプレートを作成 | Required (Staff) |
| GET | `/api/report/template/{id}/` | テンプレート詳細 | Required |
| PUT/PATCH | `/api/report/template/{id}/` | テンプレートを更新 | Required (Staff) |
| DELETE | `/api/report/template/{id}/` | テンプレートを削除 | Required (Staff) |
| GET | `/api/report/template/{id}/metadata/` | メタデータを取得 | Required |
| POST | `/api/report/template/{id}/print/` | レポートを印刷 | Required |

#### 2.8.2 ラベルテンプレート

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/label/template/` | ラベルテンプレート一覧 | Required |
| POST | `/api/label/template/` | テンプレートを作成 | Required (Staff) |
| GET | `/api/label/template/{id}/` | テンプレート詳細 | Required |
| PUT/PATCH | `/api/label/template/{id}/` | テンプレートを更新 | Required (Staff) |
| DELETE | `/api/label/template/{id}/` | テンプレートを削除 | Required (Staff) |
| GET | `/api/label/template/{id}/metadata/` | メタデータを取得 | Required |
| POST | `/api/label/print/` | ラベルを印刷 | Required |

---

### 2.9 Plugin（プラグイン）API

プラグインの管理と操作を行うAPIです。

#### 2.9.1 プラグイン設定

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/plugins/` | プラグイン一覧 | Required |
| GET | `/api/plugins/{key}/` | プラグイン詳細 | Required |
| DELETE | `/api/plugins/{key}/` | プラグインを削除 | Required (Superuser) |
| POST | `/api/plugins/install/` | プラグインをインストール | Required (Superuser) |
| POST | `/api/plugins/activate/` | プラグインを有効化 | Required (Superuser) |
| POST | `/api/plugins/deactivate/` | プラグインを無効化 | Required (Superuser) |
| POST | `/api/plugins/reload/` | プラグインをリロード | Required (Superuser) |

**フィルターパラメータ（GET /api/plugins/）**:

| パラメータ | 型 | 説明 |
|------------|------|------|
| `active` | boolean | 有効なプラグインのみ |
| `mixin` | string | 特定のmixinを実装するプラグイン |
| `builtin` | boolean | ビルトインプラグインのみ |
| `sample` | boolean | サンプルプラグインのみ |
| `installed` | boolean | インストール済みプラグインのみ |
| `search` | string | 全文検索 |

#### 2.9.2 プラグイン設定値

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/plugins/{key}/settings/` | プラグイン設定一覧 | Required |
| GET | `/api/plugins/{key}/settings/{setting_key}/` | 設定詳細 | Required |
| PUT/PATCH | `/api/plugins/{key}/settings/{setting_key}/` | 設定を更新 | Required (Staff) |

#### 2.9.3 バーコード

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| POST | `/api/barcode/` | バーコードをスキャン | Required |
| POST | `/api/barcode/link/` | バーコードをリンク | Required |
| POST | `/api/barcode/unlink/` | バーコードをアンリンク | Required |
| POST | `/api/barcode/generate/` | バーコードを生成 | Required |

#### 2.9.4 アクション

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| POST | `/api/action/` | アクションを実行 | Required |

#### 2.9.5 ロケート

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| POST | `/api/locate/` | アイテムをロケート | Required |

---

### 2.10 Machine（マシン）API

接続されたマシンを管理するAPIです。

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/machine/` | マシン一覧 | Required (Admin) |
| POST | `/api/machine/` | マシンを登録 | Required (Admin) |
| GET | `/api/machine/{id}/` | マシン詳細 | Required (Admin) |
| PUT/PATCH | `/api/machine/{id}/` | マシンを更新 | Required (Admin) |
| DELETE | `/api/machine/{id}/` | マシンを削除 | Required (Admin) |
| POST | `/api/machine/{id}/restart/` | マシンを再起動 | Required (Admin) |
| GET | `/api/machine/types/` | マシンタイプ一覧 | Required (Admin) |
| GET | `/api/machine/drivers/` | ドライバー一覧 | Required (Admin) |
| GET | `/api/machine/registry/` | レジストリ情報 | Required (Admin) |

---

### 2.11 Importer（インポーター）API

データインポートを管理するAPIです。

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| GET | `/api/importer/session/` | インポートセッション一覧 | Required |
| POST | `/api/importer/session/` | インポートセッションを作成 | Required |
| GET | `/api/importer/session/{id}/` | セッション詳細 | Required |
| PUT/PATCH | `/api/importer/session/{id}/` | セッションを更新 | Required |
| DELETE | `/api/importer/session/{id}/` | セッションを削除 | Required |
| POST | `/api/importer/session/{id}/accept/` | セッションを承認 | Required |
| GET | `/api/importer/row/` | インポート行一覧 | Required |
| GET | `/api/importer/row/{id}/` | 行詳細 | Required |
| PUT/PATCH | `/api/importer/row/{id}/` | 行を更新 | Required |
| DELETE | `/api/importer/row/{id}/` | 行を削除 | Required |

---

## 3. エラーレスポンス

### 3.1 HTTPステータスコード

| コード | 説明 |
|--------|------|
| 200 | OK - リクエスト成功 |
| 201 | Created - リソース作成成功 |
| 204 | No Content - 削除成功 |
| 400 | Bad Request - リクエスト不正 |
| 401 | Unauthorized - 認証が必要 |
| 403 | Forbidden - 権限不足 |
| 404 | Not Found - リソースが見つからない |
| 405 | Method Not Allowed - メソッドが許可されていない |
| 500 | Internal Server Error - サーバーエラー |

### 3.2 エラーレスポンス形式

```json
{
  "detail": "エラーメッセージ",
  "error_code": "ERROR_CODE"
}
```

バリデーションエラーの場合：

```json
{
  "field_name": [
    "エラーメッセージ1",
    "エラーメッセージ2"
  ],
  "non_field_errors": [
    "全体的なエラーメッセージ"
  ]
}
```

---

## 4. ページネーション

リスト取得APIはページネーションをサポートしています。

### 4.1 リクエストパラメータ

| パラメータ | 型 | デフォルト | 説明 |
|------------|------|----------|------|
| `limit` | integer | 25 | 取得件数の上限 |
| `offset` | integer | 0 | 取得開始位置 |

### 4.2 レスポンス形式

```json
{
  "count": 150,
  "next": "http://example.com/api/part/?limit=25&offset=25",
  "previous": null,
  "results": [
    {...},
    {...}
  ]
}
```

---

## 5. フィルタリングと検索

### 5.1 フィルタリング

各エンドポイントは特定のフィールドでのフィルタリングをサポートしています。

```
GET /api/part/?category=5&active=true
```

### 5.2 検索

全文検索は `search` パラメータを使用します。

```
GET /api/part/?search=resistor
```

### 5.3 ソート

`ordering` パラメータを使用してソートできます。
降順の場合は `-` プレフィックスを付けます。

```
GET /api/part/?ordering=-name
GET /api/part/?ordering=category,name
```

---

## 6. バルク操作

一部のエンドポイントはバルク削除をサポートしています。

### 6.1 バルク削除

```
DELETE /api/stock/
Content-Type: application/json

{
  "items": [1, 2, 3, 4, 5]
}
```

### 6.2 バルク作成

```
POST /api/parameter/
Content-Type: application/json

{
  "items": [
    {"model_type": "part", "model_id": 1, "template": 1, "data": "100"},
    {"model_type": "part", "model_id": 1, "template": 2, "data": "0805"}
  ]
}
```

---

## 7. Webhook

InvenTreeは外部システムとの連携のためにWebhookをサポートしています。

### 7.1 Webhook受信

| メソッド | エンドポイント | 説明 | 認証 |
|----------|----------------|------|------|
| POST | `/api/webhook/{endpoint}/` | Webhookを受信 | Webhook固有の認証 |

Webhookエンドポイントは管理画面で設定し、各エンドポイントに固有のトークンを設定できます。

---

## 8. 出力オプション

多くのリストエンドポイントは追加の詳細情報を含めるためのオプションパラメータをサポートしています。

### 8.1 共通オプション

| パラメータ | 型 | 説明 |
|------------|------|------|
| `part_detail` | boolean | 部品の詳細情報を含める |
| `supplier_detail` | boolean | サプライヤーの詳細情報を含める |
| `manufacturer_detail` | boolean | 製造元の詳細情報を含める |
| `location_detail` | boolean | ロケーションの詳細情報を含める |
| `build_detail` | boolean | 製造オーダーの詳細情報を含める |

例：
```
GET /api/stock/?part_detail=true&location_detail=true
```

---

## 9. データエクスポート

多くのリストエンドポイントはデータエクスポートをサポートしています。

### 9.1 エクスポートパラメータ

| パラメータ | 型 | 説明 |
|------------|------|------|
| `export` | string | エクスポート形式（csv, xlsx, json等） |

例：
```
GET /api/part/?export=csv
```

---

## 付録A: ステータスコード一覧

### A.1 在庫ステータス

| コード | 名前 | 説明 |
|--------|------|------|
| 10 | OK | 正常 |
| 50 | Attention | 注意が必要 |
| 55 | Damaged | 破損 |
| 60 | Destroyed | 破壊 |
| 65 | Rejected | 不合格 |
| 70 | Lost | 紛失 |
| 75 | Quarantined | 隔離 |
| 85 | Return | 返品 |

### A.2 購買オーダーステータス

| コード | 名前 | 説明 |
|--------|------|------|
| 10 | Pending | 保留中 |
| 20 | Placed | 発注済み |
| 25 | On Hold | 保留 |
| 30 | Complete | 完了 |
| 40 | Cancelled | キャンセル |
| 50 | Lost | 紛失 |
| 60 | Returned | 返品 |

### A.3 販売オーダーステータス

| コード | 名前 | 説明 |
|--------|------|------|
| 10 | Pending | 保留中 |
| 15 | In Progress | 進行中 |
| 20 | Shipped | 出荷済み |
| 25 | On Hold | 保留 |
| 30 | Complete | 完了 |
| 40 | Cancelled | キャンセル |
| 50 | Lost | 紛失 |
| 60 | Returned | 返品 |

### A.4 製造オーダーステータス

| コード | 名前 | 説明 |
|--------|------|------|
| 10 | Pending | 保留中 |
| 20 | Production | 生産中 |
| 25 | On Hold | 保留 |
| 30 | Cancelled | キャンセル |
| 40 | Complete | 完了 |

---

## 付録B: レート制限

APIにはレート制限が適用される場合があります。レート制限に達した場合、HTTP 429（Too Many Requests）が返されます。

```json
{
  "detail": "Request was throttled. Expected available in X seconds."
}
```

---

## 付録C: バージョン履歴

| バージョン | 日付 | 変更内容 |
|------------|------|----------|
| 1.0.0 | 2024-01-01 | 初版作成 |

---

## 付録D: 参考リンク

- [InvenTree公式ドキュメント](https://docs.inventree.org/)
- [InvenTree GitHub リポジトリ](https://github.com/inventree/InvenTree)
- [Django REST Framework ドキュメント](https://www.django-rest-framework.org/)
