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

# बैच निगरानी इवेंट API

> Didit में एक अनुरोध में अधिकतम 500 निगरानी इवेंट सबमिट करें और हर आइटम का अलग परिणाम पाएँ, ताकि एक गलत इवेंट बाकी बैच को कभी न रोके।



Batch API में मॉनिटरिंग इवेंट बनाने का प्रॉम्प्ट
        प्रॉम्प्ट को क्लिपबोर्ड पर कॉपी करें



      
      

\<pre>

\`Send up to 500 monitoring events to Didit in one request from my backend, and handle the per-item outcomes.

Endpoint:
POST https://verification.didit.me/v3/events/batch/

Authentication:
Use the x-api-key header with my Didit API key, from my backend only. A scoped key needs transactions: write.

Goal:
\- Flush a queue of events (logins, gameplay rounds, payment steps, chargebacks) in as few requests as possible, without one bad event blocking the others.

Request body (application/json):
\{
"events": [ { ...one event, same envelope as POST /v3/events/... }, ... ]   // 1 to 500 events
}
A bare JSON array of events is also accepted.

Behavior:
\- Each item is validated, stored and evaluated on its own, exactly like POST /v3/events/. A rejected item never rolls back the others.
\- HTTP 201 when no item was rejected, 207 when at least one was. Treat both as success and read results[].
\- results[] has one entry per item in request order, with index pointing into my events array and outcome accepted, replayed or rejected.
\- accepted and replayed items carry the same fields as the single-event response (event_uuid, status, score, rule_matches, correlation_pending, retention_class, expires_at, idempotent_replay).
\- rejected items carry errors keyed by field, in the same shape as the 400 of POST /v3/events/. A reused event_id with different content is reported as a string under errors.event_id. Send event_id in snake_case so a rejected item's results[].event_id is filled.
\- Retry only the rejected items after fixing them. Resending an accepted item is safe: it comes back as replayed.
\- occurred_at must still be within 7 days in the past and 5 minutes in the future for every item.

Example call:
curl -X POST "https://verification.didit.me/v3/events/batch/" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"events":[{"event_id":"login-2026-10-17-000001","event_category":"auth","action_type":"login","occurred_at":"2026-10-17T09:15:02.481Z","subject":{"vendor_data":"user-42"}}]}'

What to read from the response:
\- accepted_count, replayed_count, rejected_count.
\- results[].index and results[].outcome.
\- results[].errors for rejected items.
\- results[].event_uuid and results[].status for stored items.

Failure modes:
\- 400 - events missing, not an array, empty, or longer than 500 items ({ "events": "<message>" }). Nothing is stored; split the batch.
\- 429 - more than 600 ingestion requests per minute for this API key (event and transaction ingestion share this budget, apart from the 300 of every other write); honor Retry-After.
\- 401 - the API key has expired.
\- 403 - missing API key (a wrong, revoked or expired key gets 401), a scoped key without transactions: write, or code event_monitoring_disabled (event ingestion is not switched on; nothing is stored).

Side effects: stores every valid item, may create subjects, and applies the actions of matched active rules.

For the full integration shape, see /integration/integration-prompt.`

\</pre>



      
      

यहाँ पेस्ट करें

इवेंट इनजेस्शन गाइड में [बैच](https://docs.didit.me/hi/transaction-monitoring/events.md#बैच) देखें। डिवाइस लेन में SDK फ़्लश के लिए भी वही प्रति-आइटम परिणाम मिलते हैं: [SDK इवेंट सबमिशन](https://docs.didit.me/hi/transaction-monitoring/sdk-event-submission.md#बैचिंग) देखें।


## OpenAPI

````yaml hi/openapi-25.json POST /v3/events/batch/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: पहचान सत्यापन API। x-api-key हेडर के साथ प्रमाणीकृत करें।
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/events/batch/:
    post:
      tags:
        - Monitoring Events
      summary: बैच में निगरानी इवेंट बनाएं
      description: >-
        एक अनुरोध में 1 से 500 इवेंट सबमिट करें, प्रत्येक उसी एनवेलप में जैसा
        `POST /v3/events/` में होता है। प्रत्येक आइटम को अलग से सत्यापित,
        संग्रहीत और मूल्यांकित किया जाता है और उसका अपना परिणाम (`accepted`,
        `replayed` या `rejected`) प्राप्त होता है, इसलिए एक विकृत इवेंट कभी भी
        दूसरों को रोल बैक नहीं करता है: जब कोई भी आइटम अस्वीकृत नहीं हुआ था तो
        रिस्पॉन्स `201` होता है और जब कम से कम एक अस्वीकृत हुआ था तो `207` होता
        है, और दोनों का अर्थ है कि अनुरोध संसाधित किया गया था। `{"events":
        [...]}` भेजें; इवेंट का बिना एनवेलप वाला JSON ऐरे भी स्वीकार किया जाता
        है। एप्लिकेशन के लिए इवेंट इनजेशन सक्षम होना चाहिए, अन्यथा संपूर्ण
        अनुरोध `code: event_monitoring_disabled` के साथ `403` लौटाता है और कुछ
        भी संग्रहीत नहीं किया जाता है। स्कोप्ड API कुंजी को `transactions:
        write` की आवश्यकता होती है।
        [बैच](https://docs.didit.me/hi/transaction-monitoring/events#बैच) देखें।
      operationId: create_monitoring_events_batch
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - events
              properties:
                events:
                  type: array
                  minItems: 1
                  maxItems: 500
                  description: >-
                    1 से 500 इवेंट। प्रत्येक आइटम `MonitoringEventCreateRequest`
                    का अनुसरण करता है, जिसमें `occurred_at` पर 7 दिनों की पिछली
                    और 5 मिनट की आगामी विंडो शामिल है।
                  items:
                    $ref: '#/components/schemas/MonitoringEventCreateRequest'
            example:
              events:
                - event_id: login-2026-10-17-000001
                  event_category: auth
                  action_type: login
                  occurred_at: '2026-10-17T09:15:02.481Z'
                  subject:
                    vendor_data: user-42
                - event_id: deposit-2026-10-17-000002
                  event_category: payment
                  action_type: deposit_completed
                  occurred_at: '2026-10-17T09:16:40Z'
                  subject:
                    vendor_data: user-42
                  transaction_context:
                    amount: '100.00'
                    currency: EUR
                    payment_reference_id: dep_736
                  payload:
                    payment_method: card
                    status: completed
      responses:
        '201':
          description: >-
            कोई भी आइटम अस्वीकार नहीं किया गया था: प्रत्येक आइटम `accepted` या
            `replayed` है।
          content:
            application/json:
              schema:
                type: object
                required:
                  - accepted_count
                  - replayed_count
                  - rejected_count
                  - results
                properties:
                  accepted_count:
                    type: integer
                    minimum: 0
                    description: आइटम संग्रहीत और मूल्यांकित किए गए।
                  replayed_count:
                    type: integer
                    minimum: 0
                    description: समान सामग्री के साथ पहले से संग्रहीत आइटम।
                  rejected_count:
                    type: integer
                    minimum: 0
                    description: आइटम संग्रहीत नहीं किए गए।
                  results:
                    type: array
                    description: अनुरोध क्रम में, प्रति आइटम एक प्रविष्टि।
                    items:
                      type: object
                      description: >-
                        एक आइटम का परिणाम। स्वीकृत और रीप्ले किए गए आइटम में
                        `MonitoringEventIngestResult` का प्रत्येक फ़ील्ड भी होता
                        है; अस्वीकृत आइटम में इसके बजाय `event_id` और `errors`
                        होते हैं।
                      required:
                        - index
                        - outcome
                      properties:
                        index:
                          type: integer
                          minimum: 0
                          description: आपके `events` ऐरे में आइटम की स्थिति।
                        outcome:
                          type: string
                          enum:
                            - accepted
                            - replayed
                            - rejected
                          description: >-
                            `accepted`: संग्रहीत और मूल्यांकित। `replayed`: उसी
                            सामग्री के साथ पहले से संग्रहीत। `rejected`:
                            संग्रहीत नहीं किया गया; `errors` देखें।
                        event_id:
                          type: string
                          nullable: true
                          description: >-
                            आपकी `event_id`। सत्यापन द्वारा अस्वीकृत आइटमों पर
                            इसे आइटम की snake_case `event_id` कुंजी से पढ़ा जाता
                            है, इसलिए जब आइटम में इसे छोड़ दिया गया हो या
                            `eventId` उपनाम भेजा गया हो तो यह null होता है।
                        errors:
                          type: object
                          additionalProperties: true
                          description: >-
                            केवल अस्वीकृत आइटम। फ़ील्ड के अनुसार कुंजीबद्ध
                            सत्यापन त्रुटियां, `POST /v3/events/` के `400` के
                            समान आकार में; अलग सामग्री के साथ पुनः उपयोग की गई
                            `event_id` को `errors.event_id` के तहत एक स्ट्रिंग
                            के रूप में रिपोर्ट किया जाता है।
                        event_uuid:
                          type: string
                          format: uuid
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        status:
                          type: string
                          enum:
                            - ACCEPTED
                            - APPROVED
                            - IN_REVIEW
                            - DECLINED
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        score:
                          type: integer
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        rules_evaluated_count:
                          type: integer
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        rules_matched_count:
                          type: integer
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        correlation_pending:
                          type: boolean
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        retention_class:
                          type: string
                          enum:
                            - low_value
                            - standard
                            - risk_relevant
                            - monetary_or_compliance
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        expires_at:
                          type: string
                          format: date-time
                          nullable: true
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        idempotent_replay:
                          type: boolean
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        rule_matches:
                          type: array
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                          items:
                            type: object
                            required:
                              - rule_id
                              - library_key
                              - mode
                              - is_async
                            properties:
                              rule_id:
                                type: string
                                format: uuid
                                description: नियम का UUID।
                              library_key:
                                type: string
                                nullable: true
                                description: >-
                                  जब नियम को नियम लाइब्रेरी से इंस्टॉल किया गया
                                  था, तब लाइब्रेरी कुंजी, अन्यथा null।
                              mode:
                                type: string
                                enum:
                                  - ACTIVE
                                  - TEST
                                description: >-
                                  `TEST` नियम मिलान रिकॉर्ड करते हैं लेकिन कोई
                                  कार्रवाई लागू नहीं करते हैं।
                              is_async:
                                type: boolean
                                description: '`true` जब मिलान एसिंक्रोनस पास से आया हो।'
              examples:
                All landed:
                  value:
                    accepted_count: 1
                    replayed_count: 1
                    rejected_count: 0
                    results:
                      - index: 0
                        outcome: accepted
                        event_uuid: 33333333-4444-5555-6666-777777777777
                        event_id: login-2026-10-17-000001
                        status: ACCEPTED
                        score: 0
                        rules_evaluated_count: 6
                        rules_matched_count: 0
                        correlation_pending: false
                        retention_class: standard
                        expires_at: '2026-11-16T09:15:02.481000Z'
                        idempotent_replay: false
                        rule_matches: []
                      - index: 1
                        outcome: replayed
                        event_uuid: 11111111-2222-3333-4444-555555555555
                        event_id: deposit-2026-10-17-000002
                        status: ACCEPTED
                        score: 0
                        rules_evaluated_count: 6
                        rules_matched_count: 0
                        correlation_pending: false
                        retention_class: monetary_or_compliance
                        expires_at: null
                        idempotent_replay: true
                        rule_matches: []
        '207':
          description: >-
            कम से कम एक आइटम अस्वीकृत कर दिया गया था। अन्य आइटम संग्रहीत कर लिए
            गए थे; केवल अस्वीकृत आइटमों को ठीक करें और पुनः भेजें (स्वीकृत आइटम
            को पुनः भेजना सुरक्षित है, यह `replayed` के रूप में वापस आता है)।
          content:
            application/json:
              schema:
                type: object
                required:
                  - accepted_count
                  - replayed_count
                  - rejected_count
                  - results
                properties:
                  accepted_count:
                    type: integer
                    minimum: 0
                    description: आइटम संग्रहीत और मूल्यांकित किए गए।
                  replayed_count:
                    type: integer
                    minimum: 0
                    description: समान सामग्री के साथ पहले से संग्रहीत आइटम।
                  rejected_count:
                    type: integer
                    minimum: 0
                    description: आइटम संग्रहीत नहीं किए गए।
                  results:
                    type: array
                    description: अनुरोध क्रम में, प्रति आइटम एक प्रविष्टि।
                    items:
                      type: object
                      description: >-
                        एक आइटम का परिणाम। स्वीकृत और रीप्ले किए गए आइटम में
                        `MonitoringEventIngestResult` का प्रत्येक फ़ील्ड भी होता
                        है; अस्वीकृत आइटम में इसके बजाय `event_id` और `errors`
                        होते हैं।
                      required:
                        - index
                        - outcome
                      properties:
                        index:
                          type: integer
                          minimum: 0
                          description: आपके `events` ऐरे में आइटम की स्थिति।
                        outcome:
                          type: string
                          enum:
                            - accepted
                            - replayed
                            - rejected
                          description: >-
                            `accepted`: संग्रहीत और मूल्यांकित। `replayed`: उसी
                            सामग्री के साथ पहले से संग्रहीत। `rejected`:
                            संग्रहीत नहीं किया गया; `errors` देखें।
                        event_id:
                          type: string
                          nullable: true
                          description: >-
                            आपकी `event_id`। सत्यापन द्वारा अस्वीकृत आइटमों पर
                            इसे आइटम की snake_case `event_id` कुंजी से पढ़ा जाता
                            है, इसलिए जब आइटम में इसे छोड़ दिया गया हो या
                            `eventId` उपनाम भेजा गया हो तो यह null होता है।
                        errors:
                          type: object
                          additionalProperties: true
                          description: >-
                            केवल अस्वीकृत आइटम। फ़ील्ड के अनुसार कुंजीबद्ध
                            सत्यापन त्रुटियां, `POST /v3/events/` के `400` के
                            समान आकार में; अलग सामग्री के साथ पुनः उपयोग की गई
                            `event_id` को `errors.event_id` के तहत एक स्ट्रिंग
                            के रूप में रिपोर्ट किया जाता है।
                        event_uuid:
                          type: string
                          format: uuid
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        status:
                          type: string
                          enum:
                            - ACCEPTED
                            - APPROVED
                            - IN_REVIEW
                            - DECLINED
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        score:
                          type: integer
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        rules_evaluated_count:
                          type: integer
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        rules_matched_count:
                          type: integer
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        correlation_pending:
                          type: boolean
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        retention_class:
                          type: string
                          enum:
                            - low_value
                            - standard
                            - risk_relevant
                            - monetary_or_compliance
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        expires_at:
                          type: string
                          format: date-time
                          nullable: true
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        idempotent_replay:
                          type: boolean
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                        rule_matches:
                          type: array
                          description: केवल स्वीकृत और पुनः चलाए गए आइटम।
                          items:
                            type: object
                            required:
                              - rule_id
                              - library_key
                              - mode
                              - is_async
                            properties:
                              rule_id:
                                type: string
                                format: uuid
                                description: नियम का UUID।
                              library_key:
                                type: string
                                nullable: true
                                description: >-
                                  जब नियम को नियम लाइब्रेरी से इंस्टॉल किया गया
                                  था, तब लाइब्रेरी कुंजी, अन्यथा null।
                              mode:
                                type: string
                                enum:
                                  - ACTIVE
                                  - TEST
                                description: >-
                                  `TEST` नियम मिलान रिकॉर्ड करते हैं लेकिन कोई
                                  कार्रवाई लागू नहीं करते हैं।
                              is_async:
                                type: boolean
                                description: '`true` जब मिलान एसिंक्रोनस पास से आया हो।'
              examples:
                Partial success:
                  value:
                    accepted_count: 1
                    replayed_count: 0
                    rejected_count: 2
                    results:
                      - index: 0
                        outcome: accepted
                        event_uuid: 33333333-4444-5555-6666-777777777777
                        event_id: login-2026-10-17-000001
                        status: ACCEPTED
                        score: 0
                        rules_evaluated_count: 6
                        rules_matched_count: 0
                        correlation_pending: false
                        retention_class: standard
                        expires_at: '2026-11-16T09:15:02.481000Z'
                        idempotent_replay: false
                        rule_matches: []
                      - index: 1
                        event_id: deposit-2026-10-17-000002
                        outcome: rejected
                        errors:
                          payload:
                            - >-
                              payment.deposit_completed requires:
                              payment_method, status.
                      - index: 2
                        event_id: login-2026-10-16-000777
                        outcome: rejected
                        errors:
                          event_id: >-
                            event_id 'login-2026-10-16-000777' already exists
                            with a different payload.
        '400':
          description: >-
            बैच स्वयं विकृत है: `events` अनुपलब्ध है या ऐरे नहीं है, खाली है, या
            इसमें 500 से अधिक आइटम हैं। कुछ भी संग्रहीत नहीं किया गया है; बड़े
            बैचों को विभाजित करें।
          content:
            application/json:
              examples:
                Not a list:
                  value:
                    events: Expected a list of events.
                Empty:
                  value:
                    events: At least one event is required.
                Too many:
                  value:
                    events: A batch accepts at most 500 events; received 612.
        '401':
          description: >-
            स्कोप्ड API कुंजी की समय-सीमा समाप्त हो गई है। केवल समय-सीमा समाप्त
            कुंजी को `401` मिलता है; अनुपलब्ध या अमान्य कुंजी को `403` मिलता है।
          content:
            application/json:
              examples:
                Expired key:
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            अनुपस्थित `x-api-key` (गलत, निरस्त या समाप्त कुंजी को `401` मिलता
            है), बिना `transactions: write` वाली स्कोप्ड कुंजी, कुछ वर्कफ़्लो या
            स्वीकृत सत्रों तक सीमित कुंजी (ऐसी कुंजी लेन-देन निगरानी डेटा तक कभी
            नहीं पहुँचती), या कुंजी की IP अनुमति सूची के बाहर से किया गया
            अनुरोध। एप्लिकेशन के लिए इवेंट इनजेशन बंद होने पर `code:
            event_monitoring_disabled` के साथ भी लौटाया जाता है; उस स्थिति में
            कुछ भी संग्रहीत नहीं किया जाता है, और यह जाँच अनुरोध के मुख्य भाग के
            मान्य होने से पहले चलती है।
          content:
            application/json:
              examples:
                Event monitoring disabled:
                  value:
                    detail: >-
                      Event monitoring is not enabled for this application. Turn
                      on event ingestion in the transaction monitoring settings
                      before submitting events.
                    code: event_monitoring_disabled
                Missing or invalid API key:
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without access:
                  value:
                    detail: This API key has no write access to transactions.
                Key limited to workflows or approved sessions:
                  value:
                    detail: >-
                      This API key only reaches sessions inside its workflow or
                      status limits, so it can't use this endpoint.
                IP not allowed:
                  value:
                    detail: This API key can't be used from this IP address.
        '429':
          description: >-
            रेट लिमिट पार हो गई: लेन-देन निर्माण और इवेंट इनजेशन (`POST
            /v3/transactions/`, `POST /v3/events/`, `POST /v3/events/batch/`)
            प्रति API कुंजी प्रति मिनट 600 अनुरोधों का बजट साझा करते हैं, जो
            अन्य सभी राइट अनुरोधों द्वारा साझा किए जाने वाले 300 से अलग है।
            `Retry-After` सेकंड प्रतीक्षा करें, फिर पुनः प्रयास करें।
          headers:
            Retry-After:
              description: >-
                पुनः प्रयास करने से पहले प्रतीक्षा करने के सेकंड, जिन्हें ऊपर की
                ओर पूर्णांकित किया गया है ताकि पुनः प्रयास अगली विंडो में हो।
              schema:
                type: integer
                minimum: 1
                example: 30
          content:
            application/json:
              examples:
                Throttled:
                  value:
                    detail: >-
                      Ingestion rate limit exceeded. You can make up to 600
                      requests per minute.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST 'https://verification.didit.me/v3/events/batch/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "events": [
                  {"event_id": "login-2026-10-17-000001", "event_category": "auth", "action_type": "login",
                   "occurred_at": "2026-10-17T09:15:02.481Z", "subject": {"vendor_data": "user-42"}},
                  {"event_id": "deposit-2026-10-17-000002", "event_category": "payment", "action_type": "deposit_completed",
                   "occurred_at": "2026-10-17T09:16:40.000Z", "subject": {"vendor_data": "user-42"},
                   "transaction_context": {"amount": "100.00", "currency": "EUR", "payment_reference_id": "dep_736"},
                   "payload": {"payment_method": "card", "status": "completed"}}
                ]
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.monitoring_events.create_batch(
                events=[{
                    "event_id": "login-2026-10-17-000001",
                    "event_category": "auth",
                    "action_type": "login",
                    "occurred_at": "2026-10-17T09:15:02.481Z",
                    "subject": {
                        "vendor_data": "user-42",
                    },
                }, {
                    "event_id": "deposit-2026-10-17-000002",
                    "event_category": "payment",
                    "action_type": "deposit_completed",
                    "occurred_at": "2026-10-17T09:16:40Z",
                    "subject": {
                        "vendor_data": "user-42",
                    },
                    "transaction_context": {
                        "amount": "100.00",
                        "currency": "EUR",
                        "payment_reference_id": "dep_736",
                    },
                    "payload": {"payment_method": "card", "status": "completed"},
                }],
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY.
            const didit = new Didit();

            const result = await didit.monitoringEvents.createBatch({
              events: [{
                event_id: "login-2026-10-17-000001",
                event_category: "auth",
                action_type: "login",
                occurred_at: "2026-10-17T09:15:02.481Z",
                subject: {
                  vendor_data: "user-42",
                },
              }, {
                event_id: "deposit-2026-10-17-000002",
                event_category: "payment",
                action_type: "deposit_completed",
                occurred_at: "2026-10-17T09:16:40Z",
                subject: {
                  vendor_data: "user-42",
                },
                transaction_context: {
                  amount: "100.00",
                  currency: "EUR",
                  payment_reference_id: "dep_736",
                },
                payload: { payment_method: "card", status: "completed" },
              }],
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.MonitoringEvents.CreateBatch(ctx, didit.MonitoringEventsCreateBatchParams{\n\tEvents: []didit.MonitoringEventCreateRequest{{\n\t\tEventID:       \"login-2026-10-17-000001\",\n\t\tEventCategory: \"auth\",\n\t\tActionType:    \"login\",\n\t\tOccurredAt:    time.Date(2026, 10, 17, 9, 15, 2, 0, time.UTC),\n\t\tSubject: didit.MonitoringEventCreateRequestSubject{\n\t\t\tVendorData: \"user-42\",\n\t\t},\n\t}, {\n\t\tEventID:       \"deposit-2026-10-17-000002\",\n\t\tEventCategory: \"payment\",\n\t\tActionType:    \"deposit_completed\",\n\t\tOccurredAt:    time.Date(2026, 10, 17, 9, 16, 40, 0, time.UTC),\n\t\tSubject: didit.MonitoringEventCreateRequestSubject{\n\t\t\tVendorData: \"user-42\",\n\t\t},\n\t\tTransactionContext: didit.Some(didit.MonitoringEventCreateRequestTransactionContext{\n\t\t\tAmount:             didit.String(\"100.00\"),\n\t\t\tCurrency:           didit.String(\"EUR\"),\n\t\t\tPaymentReferenceID: didit.String(\"dep_736\"),\n\t\t}),\n\t\tPayload: didit.Some(map[string]any{\"payment_method\": \"card\", \"status\": \"completed\"}),\n\t}},\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.time.OffsetDateTime;

            import java.util.List;

            import java.util.Map;

            import me.didit.Didit;

            import me.didit.types.MonitoringEventCreateRequest;

            import me.didit.types.MonitoringEventsCreateBatchParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.monitoringEvents().createBatch(MonitoringEventsCreateBatchParams.builder()
                    .events(List.of(
                            MonitoringEventCreateRequest.builder()
                                    .eventId("login-2026-10-17-000001")
                                    .eventCategory(MonitoringEventCreateRequest.EventCategory.of("auth"))
                                    .actionType("login")
                                    .occurredAt(OffsetDateTime.parse("2026-10-17T09:15:02.481Z"))
                                    .subject(MonitoringEventCreateRequest.Subject.builder()
                                            .vendorData("user-42")
                                            .build())
                                    .build(),
                            MonitoringEventCreateRequest.builder()
                                    .eventId("deposit-2026-10-17-000002")
                                    .eventCategory(MonitoringEventCreateRequest.EventCategory.of("payment"))
                                    .actionType("deposit_completed")
                                    .occurredAt(OffsetDateTime.parse("2026-10-17T09:16:40Z"))
                                    .subject(MonitoringEventCreateRequest.Subject.builder()
                                            .vendorData("user-42")
                                            .build())
                                    .transactionContext(MonitoringEventCreateRequest.TransactionContext.builder()
                                            .amount("100.00")
                                            .currency("EUR")
                                            .paymentReferenceId("dep_736")
                                            .build())
                                    .payload(Map.of("payment_method", "card", "status", "completed"))
                                    .build()))
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            $result = $didit->monitoringEvents->createBatch([
                'events' => [[
                    'event_id' => 'login-2026-10-17-000001',
                    'event_category' => 'auth',
                    'action_type' => 'login',
                    'occurred_at' => '2026-10-17T09:15:02.481Z',
                    'subject' => [
                        'vendor_data' => 'user-42',
                    ],
                ], [
                    'event_id' => 'deposit-2026-10-17-000002',
                    'event_category' => 'payment',
                    'action_type' => 'deposit_completed',
                    'occurred_at' => '2026-10-17T09:16:40Z',
                    'subject' => [
                        'vendor_data' => 'user-42',
                    ],
                    'transaction_context' => [
                        'amount' => '100.00',
                        'currency' => 'EUR',
                        'payment_reference_id' => 'dep_736',
                    ],
                    'payload' => ['payment_method' => 'card', 'status' => 'completed'],
                ]],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.monitoring_events.create_batch(
              events: [{
                event_id: "login-2026-10-17-000001",
                event_category: "auth",
                action_type: "login",
                occurred_at: "2026-10-17T09:15:02.481Z",
                subject: {
                  vendor_data: "user-42",
                },
              }, {
                event_id: "deposit-2026-10-17-000002",
                event_category: "payment",
                action_type: "deposit_completed",
                occurred_at: "2026-10-17T09:16:40Z",
                subject: {
                  vendor_data: "user-42",
                },
                transaction_context: {
                  amount: "100.00",
                  currency: "EUR",
                  payment_reference_id: "dep_736",
                },
                payload: { payment_method: "card", status: "completed" },
              }]
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Collections.Generic;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await client.MonitoringEvents.CreateBatchAsync(new
            MonitoringEventsCreateBatchParams

            {
                Events = new MonitoringEventCreateRequest[]
                {
                    new()
                    {
                        EventId = "login-2026-10-17-000001",
                        EventCategory = "auth",
                        ActionType = "login",
                        OccurredAt = DateTimeOffset.Parse("2026-10-17T09:15:02.481Z"),
                        Subject = new()
                        {
                            VendorData = "user-42",
                        },
                    },
                    new()
                    {
                        EventId = "deposit-2026-10-17-000002",
                        EventCategory = "payment",
                        ActionType = "deposit_completed",
                        OccurredAt = DateTimeOffset.Parse("2026-10-17T09:16:40Z"),
                        Subject = new()
                        {
                            VendorData = "user-42",
                        },
                        TransactionContext = new MonitoringEventCreateRequestTransactionContext
                        {
                            Amount = "100.00",
                            Currency = "EUR",
                            PaymentReferenceId = "dep_736",
                        },
                        Payload = new Dictionary<string, object> { ["payment_method"] = "card", ["status"] = "completed" },
                    },
                },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    MonitoringEventCreateRequest:
      type: object
      description: >-
        इवेंट एनवेलप, प्रत्येक श्रेणी के लिए समान। camelCase उपनाम स्वीकार किए
        जाते हैं: `eventId`, `eventCategory` (या `category`), `actionType`,
        `occurredAt`, `timeZone` (या `zoneId`), `deviceContext` (या `device`),
        `transactionContext`, `customValues` (या `props`); `subject` के अंदर:
        `vendorData`, `entityType`, `fullName`; `session` के अंदर: `sessionId`,
        `pageUrl`; `transaction_context` के अंदर: `paymentReferenceId`।
      required:
        - event_id
        - event_category
        - action_type
        - occurred_at
        - subject
      properties:
        event_id:
          type: string
          maxLength: 128
          description: >-
            इवेंट के लिए आपका पहचानकर्ता, प्रति एप्लिकेशन अद्वितीय। यह
            आइडेम्पोटेंसी कुंजी है: इसके तहत समान `event_category`,
            `action_type`, `occurred_at`, `subject.vendor_data` और `payload` को
            फिर से भेजना एक रीप्ले है, कुछ भी भिन्न होना एक विरोधाभास (conflict)
            है।
          example: login-2026-10-17-000001
        event_category:
          type: string
          enum:
            - auth
            - session
            - gameplay
            - bonus
            - affiliate
            - payment
            - dispute
            - security
            - responsible_gambling
            - custom
          description: इवेंट श्रेणी।
          example: auth
        action_type:
          type: string
          minLength: 1
          maxLength: 128
          description: >-
            श्रेणी के भीतर क्या हुआ। ओपन वोकैब्युलरी; [Event
            ingestion](https://docs.didit.me/hi/transaction-monitoring/events)
            में सूचीबद्ध प्रबंधित कार्रवाइयां (उदाहरण के लिए `login`,
            `deposit_completed`, `chargeback_opened`) टाइप्ड सत्यापन और प्रबंधित
            नियम फ़ील्ड अनलॉक करती हैं। शुरुआत और अंत के व्हाइटस्पेस को ट्रिम कर
            दिया जाता है।
          example: login
        occurred_at:
          type: string
          format: date-time
          description: >-
            जब इवेंट आपकी ओर से हुआ था, ISO 8601 (ऑफ़सेट के बिना किसी मान को UTC
            माना जाता है)। अतीत में 7 दिनों से अधिक और भविष्य में 5 मिनट से अधिक
            नहीं होना चाहिए।
          example: '2026-10-17T09:15:02.481Z'
        time_zone:
          type: string
          nullable: true
          maxLength: 64
          description: >-
            आपकी ओर से घटना का टाइम ज़ोन, उदाहरण के लिए `Europe/Madrid`। इवेंट
            के साथ संग्रहीत किया जाता है; रीड endpoint द्वारा वापस नहीं किया
            जाता।
        subject:
          type: object
          description: >-
            वह उपयोगकर्ता या कंपनी जिससे यह इवेंट संबंधित है। यह आपके एप्लिकेशन
            में इस `vendor_data` वाले उपयोगकर्ता (या कंपनी) से मेल खाता है; यदि
            कोई मौजूद नहीं है तो एक बनाया जाता है।
          required:
            - vendor_data
          properties:
            vendor_data:
              type: string
              minLength: 1
              maxLength: 255
              description: विषय के लिए आपकी id।
              example: user-42
            entity_type:
              type: string
              maxLength: 32
              default: individual
              description: >-
                `company` सब्जेक्ट को एक कंपनी के रूप में रिज़ॉल्व करता है; कोई
                अन्य मान (डिफ़ॉल्ट `individual`) इसे एक व्यक्ति के रूप में
                रिज़ॉल्व करता है। एक ही `vendor_data` दोनों में से एक-एक को
                नामित कर सकता है।
              example: individual
            full_name:
              type: string
              nullable: true
              maxLength: 512
              description: >-
                डिस्प्ले नाम, केवल तभी उपयोग किया जाता है जब यह इवेंट उपयोगकर्ता
                या कंपनी बनाता है।
            email:
              type: string
              format: email
              nullable: true
              description: ईमेल पते के रूप में सत्यापित; इवेंट पर संग्रहीत नहीं।
            phone:
              type: string
              nullable: true
              maxLength: 32
              description: सत्यापित; इवेंट पर संग्रहीत नहीं।
            country:
              type: string
              nullable: true
              maxLength: 3
              description: सत्यापित; इवेंट पर संग्रहीत नहीं।
        business:
          type: object
          description: >-
            वह व्यवसाय जिससे इवेंट संबंधित है, जब यह विषय से भिन्न होता है। केवल
            `vendor_data` पढ़ा जाता है।
          additionalProperties: true
          properties:
            vendor_data:
              type: string
              maxLength: 255
              description: >-
                व्यवसाय के लिए आपकी id। `business_vendor_data` के रूप में
                फ़िल्टर करने योग्य।
              example: merchant-7
        session:
          type: object
          description: इवेंट के लिए आपका सत्र संदर्भ।
          properties:
            session_id:
              type: string
              nullable: true
              maxLength: 255
              description: >-
                आपका सत्र पहचानकर्ता। फ़िल्टर करने योग्य और `session_id` के रूप
                में वापस किया गया।
            sequence:
              type: integer
              nullable: true
              description: >-
                सत्र के भीतर इवेंट की स्थिति। `session_sequence` के रूप में
                लौटाया गया।
            page_url:
              type: string
              nullable: true
              maxLength: 2048
              description: सत्यापित; इवेंट पर संग्रहीत नहीं।
            referrer:
              type: string
              nullable: true
              maxLength: 2048
              description: सत्यापित; इवेंट पर संग्रहीत नहीं।
        device_context:
          type: object
          additionalProperties: true
          description: >-
            डिवाइस और नेटवर्क संदर्भ, जैसा भेजा गया था वैसे ही संग्रहीत और `GET
            /v3/events/{event_uuid}/` द्वारा लौटाया गया। इस सर्वर लेन पर Didit
            अंतिम उपयोगकर्ता का कनेक्शन नहीं देखता है, इसलिए नियमों द्वारा
            संवर्धित और उपयोग किया जाने वाला IP आपके द्वारा भेजा गया
            `network_context.ip_address` है।
          properties:
            fingerprint:
              type: string
              maxLength: 255
              description: >-
                डिवाइस फ़िंगरप्रिंट। `device_fingerprint` के रूप में फ़िल्टर
                करने योग्य।
            persistent_device_id:
              type: string
              maxLength: 255
              description: आपका स्थायी डिवाइस पहचानकर्ता।
            bot_score:
              type: integer
              description: >-
                आपकी अपनी पहचान प्रणाली से प्राप्त बॉट स्कोर, एक पूर्णांक
                (integer) के रूप में।
            network_context:
              type: object
              additionalProperties: true
              properties:
                ip_address:
                  type: string
                  maxLength: 64
                  description: >-
                    अंतिम उपयोगकर्ता का IP पता। प्रत्येक विशिष्ट सार्वजनिक पते
                    को एक बार समृद्ध किया जाता है।
                  example: 203.0.113.42
        transaction_context:
          type: object
          description: >-
            धन संबंधी संदर्भ। यहाँ गैर-रिक्त मान कार्रवाई की आवश्यक payload
            कुंजियों को भी संतुष्ट करते हैं।
          properties:
            amount:
              type: string
              nullable: true
              description: >-
                दशमलव स्ट्रिंग के रूप में राशि (एक संख्या भी स्वीकार की जाती
                है)।
              example: '1000.00'
            currency:
              type: string
              nullable: true
              maxLength: 10
              description: मुद्रा कोड।
            direction:
              type: string
              nullable: true
              maxLength: 16
              description: धन के संचलन की दिशा, उदाहरण के लिए `inbound` या `outbound`।
            payment_reference_id:
              type: string
              nullable: true
              maxLength: 255
              description: >-
                आपका भुगतान संदर्भ। `payment_reference_id` के रूप में फ़िल्टर
                करने योग्य।
        payload:
          type: object
          additionalProperties: true
          description: >-
            श्रेणी के डोमेन फ़ील्ड, JSON-एन्कोड होने के बाद अधिकतम 16384 बाइट्स।
            कुछ कार्रवाइयों के लिए कुंजियों की आवश्यकता होती है (`payload` या
            `transaction_context` में): `gameplay.p2p_settlement` के लिए
            `game_id`, `counterparty_vendor_data`, `stake_amount`,
            `net_result_amount`, `role` और `hand_id`, `round_id`, `match_id` में
            से एक आवश्यक है; `gameplay.bet_placed` और `gameplay.bet_settled` के
            लिए `game_id` आवश्यक है; `payment.deposit_initiated`,
            `payment.deposit_completed`, `payment.withdrawal_requested` और
            `payment.withdrawal_completed` के लिए `payment_reference_id`,
            `amount`, `currency`, `payment_method`, `status` आवश्यक हैं;
            `payment.withdrawal_address_changed` के लिए
            `withdrawal_address_hash` आवश्यक है; `dispute.chargeback_opened`,
            `dispute.chargeback_won` और `dispute.chargeback_lost` के लिए
            `payment_reference_id` और `dispute_id`, `chargeback_id` में से एक
            आवश्यक है; `session.bot_signal_observed` के लिए
            `telemetry_schema_version` और `bot_score`, `actions_per_minute`,
            `timing_variance_ms`, `pointer_entropy`, `keystroke_entropy`,
            `reaction_time_ms_p50` में से एक आवश्यक है;
            `responsible_gambling.self_exclusion_match` के लिए
            `registry_source`, `exclusion_status`, `identity_match_ref` आवश्यक
            हैं। `_changed` पर समाप्त होने वाली प्रत्येक `security` कार्रवाई के
            लिए `changed_field`, साथ ही `previous_reference_hash` या
            `new_reference_hash` आवश्यक है जब फ़ील्ड `password`, `mfa_method`,
            `mfa`, `email`, `phone`, `withdrawal_address`, `payout_method` या
            `api_key` हो। हैश और संदर्भ भेजें, कभी भी कार्ड नंबर, पूर्ण निकासी
            पता, पासवर्ड हैश या MFA सीक्रेट न भेजें।
        custom_values:
          type: object
          description: >-
            आपकी अपनी अधिकतम 100 कुंजियाँ, जिन्हें नियमों से
            `custom_values.<key>` के रूप में संदर्भित किया जा सकता है। मान अदिश
            (string, number, boolean या null) होने चाहिए; नेस्टेड ऑब्जेक्ट और
            ऐरे अस्वीकार कर दिए जाते हैं।
          additionalProperties:
            nullable: true
            oneOf:
              - type: string
              - type: number
              - type: boolean
      example:
        event_id: login-2026-10-17-000001
        event_category: auth
        action_type: login
        occurred_at: '2026-10-17T09:15:02.481Z'
        time_zone: Europe/Madrid
        subject:
          vendor_data: user-42
          entity_type: individual
        session:
          session_id: web-session-abc
          sequence: 142
        device_context:
          fingerprint: fp-a8c1
          network_context:
            ip_address: 203.0.113.42
        payload:
          method: password
        custom_values:
          vip_tier: gold
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        आपकी एप्लिकेशन की API कुंजी, Business Console में Developers -> API keys
        से। प्राथमिक कुंजी के पास पूर्ण एक्सेस होता है। एक नामित कुंजी को स्कोप
        किया जा सकता है: प्रति संसाधन none, read या write, कुछ वर्कफ़्लो या
        स्वीकृत सत्रों तक सीमित, IP पतों की सूची तक सीमित, और समाप्ति तिथि तक
        सीमित। 401 का अर्थ है कि कुंजी गलत है, निरस्त कर दी गई है या उसकी
        समय-सीमा समाप्त हो गई है; 403 का अर्थ है कि कोई कुंजी नहीं भेजी गई थी,
        कुंजी के पास इस संसाधन या कार्रवाई का एक्सेस नहीं है, या अनुरोध उसकी IP
        सूची से बाहर के पते से आया था; सत्र रूट पर 404 का अर्थ है कि सत्र कुंजी
        के वर्कफ़्लो या स्थितियों से बाहर है। मीडिया एक्सेस के बिना एक कुंजी को
        छवि, वीडियो और PDF URL null के रूप में प्राप्त होते हैं, और सत्र write
        के बिना एक कुंजी को सत्र लिंक और token null के रूप में प्राप्त होते हैं।
        देखें https://docs.didit.me/console/api-keys।

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.