> ## Documentation Index
> Fetch the complete documentation index at: https://docs.starfort.io/llms.txt
> Use this file to discover all available pages before exploring further.

# レスポンス形式

> Starfort Guard API のレスポンススキーマ。トップレベル action、パートごとの input_results、PII と Topic の detected_items を例示します (Starfort v1.4 版)

呼び出しが成功すると、トップレベルの `action` と、コンテンツパートごとの内訳を含む `input_results` を伴った **HTTP 200** が返されます。Starfort は Guardian のレスポンスボディを**そのまま**返します。ラッパーもフィールドの再構成もありません。

## action モデル

アクションのセットはポリシータイプによって異なります。

* **PII** ポリシーは `PASS` / `MASK` / `BLOCK` を返します。
* **Topic** ポリシーは **2-state** です。`PASS` または `BLOCK` を返します（`unsafe` に分類されたトピックはブロックされ、それ以外は通過します）。

ルートの `action` は、検出されたすべての中で**最も重大度の高い**ものです：`BLOCK` > `MASK` > `PASS`。[アクション](/ja/v1.4/concepts/actions-pass-mask-block)を参照してください。

## トップレベル

| フィールド           | 型      | 備考                                                     |
| --------------- | ------ | ------------------------------------------------------ |
| `action`        | string | `PASS` \| `MASK` \| `BLOCK` — すべての結果の中で**最も重大度の高い**もの。 |
| `input_results` | array  | 検査されたコンテンツパートごとに 1 エントリ。何も検査されなかった場合は空になります。           |

各 `input_results[]` エントリ：

| フィールド                    | 備考                                                                                                                                                                                                     |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `index`                  | `messages[].content` 内でのコンテンツパートの位置。                                                                                                                                                                   |
| `type`                   | `text`、`image`、`audio`、`video`、`document`、`archive`。                                                                                                                                                   |
| `identifier`             | ファイルパートの場合はファイル名。それ以外は `null`。                                                                                                                                                                         |
| `action`                 | このパートのアクション。                                                                                                                                                                                           |
| `processed_content`      | **処理済みコンテンツ** — Guardian がパース・正規化（必要に応じて OCR・デコード）した上で再エンコードしたコンテンツ。送出が発生する判定（`PASS`・`MASK`）では常に処理済みコンテンツが入ります — テキストパートは文字列、ファイルパートは base64 文字列。`BLOCK` の場合、または処理済みコンテンツを作れない入力（未対応・処理失敗）の場合は `null`。 |
| `processed_content_type` | `processed_content` のコンテンツタイプ — テキストは `text`、ファイル類は MIME タイプ。`processed_content` が `null` の場合は `null`。                                                                                                 |
| `results`                | ポリシーごとの結果（下記参照）。                                                                                                                                                                                       |

## MASK の例（PII）

```json theme={"dark"}
{
  "action": "MASK",
  "input_results": [{
    "index": 0, "type": "text", "identifier": null, "action": "MASK",
    "processed_content": "私の電話番号は [PHONE_NUMBER_1]、メールアドレスは [EMAIL_1] です。",
    "processed_content_type": "text",
    "results": [{
      "policy_name": "PII Masking Policy", "policy_type": "PII", "action": "MASK",
      "detected_items": [
        { "rule_type": "regex", "rule_id": 15, "rule_name": "phone_number:_korea_mobile_all_separators",
          "action": "MASK", "confidence": 1, "mask_word": "PHONE_NUMBER_1",
          "matched_text": "010-2543-2513", "alert_message": "携帯電話番号を検出しました" },
        { "rule_type": "regex", "rule_id": 18, "rule_name": "email:_email_address",
          "action": "MASK", "confidence": 1, "mask_word": "EMAIL_1",
          "matched_text": "jane@acme.co.kr", "alert_message": "メールアドレスを検出しました" }
      ]
    }]
  }]
}
```

**マスキングトークンの形式：** `[<MASK_WORD>_<n>]`。出現ごとに番号が付与されます（`[PHONE_NUMBER_1]`、`[PHONE_NUMBER_2]`、…）。

## 処理済みコンテンツの送出原則 — 外部へ送るのは常に `processed_content`

v1.4 からは、外部の AI サービスへ出ていくコンテンツは、呼び出し元が送信した原本ではなく、Guardian が内容を実際に確認して再構成した**処理済みコンテンツ**（`processed_content`）に統一されます。

* **PASS** — 処理済みコンテンツを送出します。マスキング対象がなく内容が原文と同じであっても、送られるのは Guardian が再構成した処理済みコンテンツです。
* **MASK** — マスキングされた処理済みコンテンツを送出します。
* **BLOCK** — 送出はありません（`processed_content` は `null`）。
* **処理済みコンテンツを作れない入力**（未対応ファイル、パース・デコードの失敗） — Guardian が内容を確認できなかったため `null` であり、代わりに原本を送出してはいけません（フェイルクローズ）。

画像・ドキュメント・音声のように OCR・デコード・パースの変換を経る入力では、処理の過程が原本のすべての内容を捕捉していると保証できません。処理済みコンテンツだけを送出すれば、外部へ出るコンテンツが Guardian の実際に確認した表現に限定され、確認できなかった内容が原本に残ったまま流出する経路が閉じられます。

<Note>
  **v1.3 までとの違い** — v1.3 までは `processed_content` は `MASK` のときにのみ設定され、`PASS` は呼び出し元の原本がそのまま出ていくモデルでした（フィールドは `null`）。v1.4 からは `PASS` でも処理済みコンテンツが設定され、原本の代わりに処理済みコンテンツを送出することが契約になります。
</Note>

## BLOCK の例（Topic）

```json theme={"dark"}
{
  "action": "BLOCK",
  "input_results": [{
    "index": 0, "type": "text", "identifier": null, "action": "BLOCK",
    "processed_content": null, "processed_content_type": null,
    "results": [{
      "policy_name": "Topic Policy", "policy_type": "TOPIC", "action": "BLOCK",
      "detected_items": [
        { "rule_id": "WPN", "rule_name": "Weapons", "action": "BLOCK",
          "confidence": 1, "classification": "unsafe", "alert_message": "…" }
      ]
    }]
  }]
}
```

## `detected_items` — PII と Topic の違い

フィールドはポリシータイプによって異なります。

| フィールド                                 | PII                           | Topic                              |
| ------------------------------------- | ----------------------------- | ---------------------------------- |
| `rule_type`                           | `ner` \| `regex` \| `keyword` | —                                  |
| `rule_id`                             | 整数                            | 文字列のトピックコード（例：`WPN`）               |
| `rule_name`                           | ルール名                          | トピックのタイトル                          |
| `classification`                      | —                             | `safe`（→ PASS）\| `unsafe`（→ BLOCK） |
| `mask_word`                           | あり（MASK）                      | —                                  |
| `matched_text`                        | 一致した範囲                        | —                                  |
| `action`、`confidence`、`alert_message` | あり                            | あり                                 |

<Note>
  まずトップレベルの `action` を読み取ってください。`PASS` と `MASK` では、原本ではなく `processed_content` を転送します（上記の処理済みコンテンツの送出原則）。`BLOCK` の場合はモデルを呼び出さないでください。[アクション](/ja/v1.4/concepts/actions-pass-mask-block)を参照してください。
</Note>

## `PASS` は常に「分析済みで、何も検出されなかった」を意味する

空の `results` を伴う `PASS` は決して曖昧ではありません。それは、Guardian が**分析を完了し、何も見つからなかった**ことを意味します。分析に失敗したという意味ではありません。Guardian が分析できないリクエストは、劣化した 200 ではなく **HTTP エラー**を返すため（Guardian のフェイルクローズ）、障害がクリーンな結果と誤って解釈されることは決してありません。[エラーと状態](/ja/v1.4/api/errors)を参照してください。
