> 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/hi/self-hosted/enterprise/deployment-manager/services/event-store/rest-api.md).

# Event Store REST API

on-device Event Store v2 API के लिए endpoint संदर्भ, जिसमें event schemas और administration routes शामिल हैं।

Event Store एक प्रबंधित डिवाइस पर चलता है और उस डिवाइस पर पाइपलाइनों द्वारा उत्पन्न इनफ़ेरेंस इवेंट्स को संग्रहीत करता है। बेस URL है `http://<device-ip>:8001`, और इंटरैक्टिव Swagger दस्तावेज़ीकरण यहाँ उपलब्ध है `/docs`. देखें [Services](/deployment/hi/self-hosted/enterprise/deployment-manager/services.md#using-the-apis) बेस URL, प्रमाणीकरण, और सभी ऑन-डिवाइस सेवा API द्वारा साझा किए गए त्रुटि-आकार नियमों के लिए।

v2 API camelCase इनपुट स्वीकार करता है (उदा.: `base64Image`, `objectDetections`) और snake\_case प्रतिक्रियाएँ लौटाता है।

{% hint style="warning" %}
यह क्लाउड नहीं है [Vision Events API](/deployment/hi/monitoring-and-analytics/vision-events.md). स्थानीय अनुबंध उपयोग करता है `event_schema`, `event_data` और `inference_timestamp` जबकि क्लाउड उपयोग करता है `eventType`, `useCaseId` और `timestamp`, और यह अपलोड की गई छवियों के संदर्भों के बजाय सीधे इमेज बाइट्स लेता है। क्लाउड पेलोड यहाँ मान्य नहीं होगा।
{% endhint %}

यदि `API_KEY` सेवा पर सेट है, तो के अलावा हर endpoint `/health` एक की आवश्यकता होती है `X-API-Key` हेडर की। देखें [प्रमाणीकरण](/deployment/hi/self-hosted/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` इवेंट को खुला रखने के लिए ताकि बाद में वीडियो या केवल-स्थानीय फ़ाइल जोड़ी जा सके, फिर उसे finalize करें। को छोड़ना `ड्राफ्ट` इवेंट को निर्माण के समय ही finalize कर देता है, इसलिए मौजूदा producers पर कोई असर नहीं पड़ता।

{% hint style="warning" %}
`solution` स्कीमा में वैकल्पिक है, लेकिन रनटाइम पर शर्तानुसार आवश्यक है। जब सेवा पर cloud upload सक्षम हो और `DEFAULT_SOLUTION_ID` सेट नहीं है, तो बिना के इवेंट बनाना `solution` लौटाता है `400`. इसे हर इवेंट के साथ भेजें या environment variable सेट करें।
{% endhint %}

{% openapi src="/files/22904abf1cad0eeb9281431eda87b158e6384434" path="/v2/events" method="post" %}
[edge-event-store.yaml](https://2297977984-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` के माध्यम से क्वेरी योग्य नहीं है `metadata_filter`. केवल `custom_metadata` इवेंट पर ही है।

{% openapi src="/files/22904abf1cad0eeb9281431eda87b158e6384434" path="/v2/events" method="get" %}
[edge-event-store.yaml](https://2297977984-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/22904abf1cad0eeb9281431eda87b158e6384434" path="/v2/events/{event\_id}" method="get" %}
[edge-event-store.yaml](https://2297977984-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/22904abf1cad0eeb9281431eda87b158e6384434" path="/v2/events/latest/query" method="get" %}
[edge-event-store.yaml](https://2297977984-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/22904abf1cad0eeb9281431eda87b158e6384434" path="/events/count/stats" method="get" %}
[edge-event-store.yaml](https://2297977984-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 %}

## ड्राफ्ट जीवनचक्र

एक producer जिसे pass/fail निर्णय के बाद एन्कोड किया गया वीडियो जोड़ना होता है, वह इवेंट को ड्राफ्ट के रूप में बनाता है, फ़ाइल तैयार होने पर अपलोड करता है, फिर उसे finalize करता है:

```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"
```

जब तक कोई इवेंट finalized नहीं होता, cloud upload उसे छोड़ देता है। यह cleanup से भी सुरक्षित रहता है, लेकिन केवल तब जब सेवा पर cloud upload सक्षम हो। Cloud upload बंद होने पर, ड्राफ्ट किसी भी अन्य रिकॉर्ड जितना ही deletable होता है, इसलिए retention और capacity cleanup उस इवेंट को हटा सकते हैं जो अभी भी तैयार किया जा रहा हो।

जिस ड्राफ्ट का producer कभी finalize नहीं करता, उसे के बाद force-closed कर दिया जाता है `DRAFT_AUTO_FINALIZE_SECONDS`. दोनों `finalized_at` और `auto_finalized_at` उस स्थिति में सेट हो जाते हैं, इसलिए पढ़ें `auto_finalized_at` ताकि force-closed इवेंट और producer द्वारा स्वयं finalize किए गए इवेंट में अंतर किया जा सके।

अटैचमेंट routes बाइट्स जोड़ते हैं, इसलिए finalize के विपरीत वे capacity backpressure के अधीन होते हैं: जब store अपनी सीमाओं से ऊपर होता है, तो वे लौटाते हैं `529` और अपलोड स्वीकार नहीं किया जाता।

{% openapi src="/files/22904abf1cad0eeb9281431eda87b158e6384434" path="/v2/events/{event\_id}/videos" method="post" %}
[edge-event-store.yaml](https://2297977984-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/22904abf1cad0eeb9281431eda87b158e6384434" path="/v2/events/{event\_id}/local-only-files" method="post" %}
[edge-event-store.yaml](https://2297977984-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/22904abf1cad0eeb9281431eda87b158e6384434" path="/v2/events/{event\_id}/finalize" method="post" %}
[edge-event-store.yaml](https://2297977984-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 दोनों वर्तनी स्वीकार करता है।

दोनों फ़ील्ड अलग-अलग तरीके से विफल होते हैं। एक खराब `event_schema` लौटाता है `422`. एक `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>string</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>string</td><td>नहीं</td><td>अधिकतम 1000 वर्ण</td></tr><tr><td><code>itemCount</code></td><td>integer</td><td>नहीं</td><td>0 या उससे अधिक</td></tr><tr><td><code>itemType</code></td><td>string</td><td>नहीं</td><td>अधिकतम 1000 वर्ण</td></tr><tr><td><code>externalId</code></td><td>string</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>string</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>string</td><td>नहीं</td><td>अधिकतम 10000 वर्ण</td></tr><tr><td><code>externalId</code></td><td>string</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>string</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="custom" %}

<table data-search="false"><thead><tr><th>फ़ील्ड</th><th>प्रकार</th><th>आवश्यक</th><th>सीमा</th></tr></thead><tbody><tr><td><code>externalId</code></td><td>string</td><td>नहीं</td><td>अधिकतम 1000 वर्ण</td></tr><tr><td><code>value</code></td><td>string</td><td>नहीं</td><td>अधिकतम 10000 वर्ण</td></tr></tbody></table>

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

जो संरचित डेटा इन फ़ील्ड्स में फ़िट नहीं होता, उसके लिए उपयोग करें `custom_metadata` इवेंट पर, जो क्वेरी योग्य है, या प्रति-छवि `metadata`, जो क्वेरी योग्य नहीं है।
{% endtab %}
{% endtabs %}

## फ़ाइलें डाउनलोड करें

छवि IDs अस्थायी होती हैं। Cleanup किसी भी समय फ़ाइल हटा सकता है, इसलिए इन्हें संभालें `404` और IDs को एक ही सत्र से आगे cache न करें। तुलना करें `current_file_count` के विरुद्ध `original_file_count` किसी इवेंट पर यह जानने के लिए कि उसकी फ़ाइलें साफ़ की गई थीं या नहीं।

{% openapi src="/files/22904abf1cad0eeb9281431eda87b158e6384434" path="/images/{image\_id}" method="get" %}
[edge-event-store.yaml](https://2297977984-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/22904abf1cad0eeb9281431eda87b158e6384434" path="/videos/{video\_id}" method="get" %}
[edge-event-store.yaml](https://2297977984-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/22904abf1cad0eeb9281431eda87b158e6384434" path="/local-only-files/{file\_id}" method="get" %}
[edge-event-store.yaml](https://2297977984-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` वर्तमान उपयोग, सक्रिय कॉन्फ़िगरेशन, प्रत्येक सीमा के विरुद्ध क्षमता, और अगला cleanup pass क्या हटाएगा, यह रिपोर्ट करता है। इस पर अलर्ट दें `capacity.storage.percent_used` और `capacity.records.percent_used` 80% से ऊपर।

{% openapi src="/files/22904abf1cad0eeb9281431eda87b158e6384434" path="/stats" method="get" %}
[edge-event-store.yaml](https://2297977984-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/22904abf1cad0eeb9281431eda87b158e6384434" path="/health" method="get" %}
[edge-event-store.yaml](https://2297977984-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/22904abf1cad0eeb9281431eda87b158e6384434" path="/admin/cleanup" method="post" %}
[edge-event-store.yaml](https://2297977984-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 %}

रीसेट करने के लिए दो कॉल लगती हैं ताकि यह गलती से न हो सके। `/reset/request` 60 सेकंड के लिए मान्य एकल-उपयोग टोकन लौटाता है, और `/reset/confirm` डिलीट करता है।

{% hint style="danger" %}
एक पुष्टि किया गया रीसेट store में मौजूद हर इवेंट और फ़ाइल को स्थायी रूप से हटा देता है। इसे वापस नहीं किया जा सकता।
{% endhint %}

{% openapi src="/files/22904abf1cad0eeb9281431eda87b158e6384434" path="/reset/request" method="post" %}
[edge-event-store.yaml](https://2297977984-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/22904abf1cad0eeb9281431eda87b158e6384434" path="/reset/confirm" method="post" %}
[edge-event-store.yaml](https://2297977984-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 %}
