> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/deployment/ja/serufuhosuto/enterprise/deployment-manager/services/event-store/rest-api.md).

# Event Store REST API

イベントスキーマと管理ルートを含む、オンデバイス Event Store v2 API のエンドポイントリファレンス。

Event Store は管理対象デバイス上で動作し、そのデバイス上のパイプラインによって生成された推論イベントを保存します。ベース URL は `http://<device-ip>:8001`、対話型 Swagger ドキュメントは次の URL で提供されます `/docs`。参照: [サービス](/deployment/ja/serufuhosuto/enterprise/deployment-manager/services.md#using-the-apis) 。ベース URL、認証、およびデバイス上のすべてのサービス API に共通するエラー形式のルールについては、こちらを参照してください。

v2 API は camelCase の入力を受け付けます（例： `base64Image`, `objectDetections`）し、snake\_case のレスポンスを返します。

{% hint style="warning" %}
これはクラウドの [Vision Events API](/deployment/ja/to/vision-events.md)ではありません。ローカルの仕様では `event_schema`, `event_data`、および `inference_timestamp` を使いますが、クラウドでは `eventType`, `useCaseId`、および `timestamp`を使用します。また、アップロードされた画像への参照ではなく、画像バイトを直接受け取ります。ここではクラウドのペイロードは検証に通りません。
{% endhint %}

もし `API_KEY` がサービスに設定されている場合、次を除くすべてのエンドポイントで `/health` が必要です `X-API-Key` ヘッダー。参照： [認証](/deployment/ja/serufuhosuto/enterprise/deployment-manager/services/event-store.md#authentication).

```bash
curl -H "X-API-Key: $EVENT_STORE_API_KEY" \\
  "http://<device-ip>:8001/v2/events/latest/query?limit=5"
```

## イベントを作成

バウンディング बॉックス座標は中心基準の絶対ピクセルです： `x` と `y` は बॉックスの中心です。 `width` と `height` は全体の寸法です。信頼度は 0.0 から 1.0 までです。

設定する `draft: true` 動画やローカル専用ファイルを後から添付できるようにイベントを開いたままにし、その後で確定します。省略すると `draft` 作成時にイベントが確定されるため、既存のプロデューサーには影響ありません。

{% hint style="warning" %}
`solution` はスキーマ上では任意ですが、実行時には条件付きで必須です。サービスでクラウドアップロードが有効で、 `DEFAULT_SOLUTION_ID` が設定されていない場合、次を指定せずにイベントを作成すると `solution` 返します `400`。各イベントで送信するか、環境変数を設定してください。
{% endhint %}

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/v2/events" method="post" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

## イベントをクエリ

`GET /v2/events` 時間範囲、ソース、カスタムメタデータで絞り込みます。 `metadata_filter` は次の形式を取ります `key:value` または `key:op:value` 演算子は `eq`, `ne`, `gt`, `lt`, `gte`、および `lte`で、AND ロジックで繰り返されます。

画像ごとの `メタデータ` は次ではクエリできません `metadata_filter`。クエリできるのは `custom_metadata` というイベント上の項目だけです。

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/v2/events" method="get" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/v2/events/{event\_id}" method="get" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/v2/events/latest/query" method="get" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/events/count/stats" method="get" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

## ドラフトのライフサイクル

合否判定後にエンコードされた動画を添付する必要があるプロデューサーは、イベントをドラフトとして作成し、準備ができたらファイルをアップロードしてから確定します：

```bash
EVENT_ID=$(curl -s -X POST http://<device-ip>:8001/v2/events \\
  -H "Content-Type: application/json" \
  -d '{"inference_timestamp":"2025-01-30T14:30:00Z","event_schema":"quality_check","event_data":{"result":"pass"},"solution":"a1b2c3d4e5f67890","draft":true}' \\
  | jq -r '.id')

curl -X POST "http://<device-ip>:8001/v2/events/$EVENT_ID/videos" -F "file=@clip.mp4"
curl -X POST "http://<device-ip>:8001/v2/events/$EVENT_ID/finalize"
```

イベントが確定されるまではクラウドアップロードの対象になりません。また、クラウドアップロードがサービスで有効な間のみクリーンアップから保護されます。クラウドアップロードがオフの場合、ドラフトは他のレコードと同様に削除可能であるため、保持および容量クリーンアップによって、まだ作成途中のものも削除されることがあります。

プロデューサーが finalize を一度も呼ばないドラフトは、次の後に強制的にクローズされます `DRAFT_AUTO_FINALIZE_SECONDS`。その場合、 `finalized_at` と `auto_finalized_at` の両方が設定されます。したがって、 `auto_finalized_at` を読んで、強制クローズされたイベントとプロデューサー自身が確定したイベントを区別してください。

添付ルートはバイトを追加するため、finalize とは異なり容量バックプレッシャーの対象になります。ストアが上限を超えると、次を返します `529` 、アップロードは受け付けられません。

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/v2/events/{event\_id}/videos" method="post" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/v2/events/{event\_id}/local-only-files" method="post" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/v2/events/{event\_id}/finalize" method="post" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

## イベントスキーマ

`event_schema` は次の構造を選択します `event_data`。各スキーマは定義していないフィールドを禁止し、すべてのフィールドは camelCase と snake\_case の両方の表記を受け付けます。

この 2 つのフィールドは失敗の仕方が異なります。不正な `event_schema` 返します `422`。1つの `event_data` ペイロードが指定されたスキーマに準拠しない場合、次を返します `400`、文字列 `detail` でスキーマ名を示します。

{% tabs %}
{% tab title="quality\_check" %}

<table data-search="false"><thead><tr><th>フィールド</th><th>型</th><th>必須</th><th>制約</th></tr></thead><tbody><tr><td><code>result</code></td><td><code>"pass"</code> または <code>"fail"</code></td><td>はい</td><td></td></tr><tr><td><code>externalId</code></td><td>文字列</td><td>いいえ</td><td>最大1000文字</td></tr></tbody></table>

```json
{ "result": "pass", "externalId": "SKU-12345" }
```

{% endtab %}

{% tab title="inventory\_count" %}

<table data-search="false"><thead><tr><th>フィールド</th><th>型</th><th>必須</th><th>制約</th></tr></thead><tbody><tr><td><code>location</code></td><td>文字列</td><td>いいえ</td><td>最大1000文字</td></tr><tr><td><code>itemCount</code></td><td>整数</td><td>いいえ</td><td>0以上</td></tr><tr><td><code>itemType</code></td><td>文字列</td><td>いいえ</td><td>最大1000文字</td></tr><tr><td><code>externalId</code></td><td>文字列</td><td>いいえ</td><td>最大1000文字</td></tr></tbody></table>

```json
{ "location": "warehouse-A", "itemCount": 42, "itemType": "widgets" }
```

{% endtab %}

{% tab title="safety\_alert" %}

<table data-search="false"><thead><tr><th>フィールド</th><th>型</th><th>必須</th><th>制約</th></tr></thead><tbody><tr><td><code>alertType</code></td><td>文字列</td><td>いいえ</td><td>最大256文字。使用できるのは英字、数字、アンダースコア、スペース、ハイフンのみです</td></tr><tr><td><code>severity</code></td><td><code>"low"</code>, <code>"medium"</code>、または <code>"high"</code></td><td>いいえ</td><td></td></tr><tr><td><code>description</code></td><td>文字列</td><td>いいえ</td><td>最大10000文字</td></tr><tr><td><code>externalId</code></td><td>文字列</td><td>いいえ</td><td>最大1000文字</td></tr></tbody></table>

```json
{ "alertType": "no_ppe", "severity": "high", "description": "Worker entered area without hard hat" }
```

{% endtab %}

{% tab title="operator\_feedback" %}

<table data-search="false"><thead><tr><th>フィールド</th><th>型</th><th>必須</th><th>制約</th></tr></thead><tbody><tr><td><code>relatedEventId</code></td><td>文字列</td><td>はい</td><td>評価対象のイベントのID</td></tr><tr><td><code>feedback</code></td><td><code>"correct"</code>, <code>"incorrect"</code>、または <code>"inconclusive"</code></td><td>はい</td><td></td></tr></tbody></table>

```json
{ "relatedEventId": "550e8400-e29b-41d4-a716-446655440000", "feedback": "correct" }
```

これらは次で再取得できます `related_event_id` でフィルタする `GET /v2/events`.
{% endtab %}

{% tab title="カスタム" %}

<table data-search="false"><thead><tr><th>フィールド</th><th>型</th><th>必須</th><th>制約</th></tr></thead><tbody><tr><td><code>externalId</code></td><td>文字列</td><td>いいえ</td><td>最大1000文字</td></tr><tr><td><code>値</code></td><td>文字列</td><td>いいえ</td><td>最大10000文字</td></tr></tbody></table>

```json
{ "externalId": "sensor-123", "value": "temperature:72.5" }
```

これらのフィールドに収まらない構造化データには、次を使用してください `custom_metadata` イベント上のクエリ可能な項目、または画像ごとの `メタデータ`（こちらはクエリ不可です）。
{% endtab %}
{% endtabs %}

## ファイルをダウンロード

画像 ID は一時的です。クリーンアップはいつでもファイルを削除できるため、適切に処理し `404` 、ID は 1 セッションを超えてキャッシュしないでください。比較： `current_file_count` を `original_file_count` イベントの original\_file\_count と比較して、そのファイルがクリーンアップされたかどうかを判断します。

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/images/{image\_id}" method="get" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/videos/{video\_id}" method="get" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/local-only-files/{file\_id}" method="get" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

## 統計とヘルス

`/stats` 現在の使用状況、アクティブな設定、各上限に対する容量、および次のクリーンアップで削除されるものを報告します。次をアラート対象にしてください `capacity.storage.percent_used` と `capacity.records.percent_used` 80% 超。

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/stats" method="get" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/health" method="get" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

## 管理

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/admin/cleanup" method="post" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

リセットには 2 回の呼び出しが必要なため、誤って実行されることはありません。 `/reset/request` 60 秒間有効な 1 回限りのトークンを返し、 `/reset/confirm` 削除を実行します。

{% hint style="danger" %}
確認済みのリセットは、ストア内のすべてのイベントとファイルを完全に削除します。元に戻すことはできません。
{% endhint %}

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/reset/request" method="post" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/b69e2be475768f40013efa10099f0754db8c3a26" path="/reset/confirm" method="post" %}
[edge-event-store.yaml](https://970637113-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-649d4e0cb1dff61d7b5026b17f0f0793798ea350%2Fedge-event-store.yaml?alt=media)
{% endopenapi %}
