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

# इवेंट इनजेशन

> अपने एप्लिकेशन से उपयोग इवेंट भेजें ताकि ग्राहक की खपत को ट्रैक किया जा सके और बिलिंग को शक्ति दी जा सके।

इवेंट उपयोग-आधारित बिलिंग की नींव हैं। बिल योग्य क्रियाएँ होने पर इवेंट भेजें, और मीटर उन्हें चार्ज में संचित करते हैं।

<Card title="API Reference - Events Ingestion" icon="code" href="/api-reference/usage-events/ingest-events">
  उदाहरणों और प्रतिक्रिया कोड के साथ पूर्ण API दस्तावेज़।
</Card>

## इवेंट संरचना

<Accordion title="Required Fields">
  <ParamField body="event_id" type="string" required>
    विशिष्ट पहचानकर्ता। UUID का उपयोग करें या ग्राहक ID + टाइमस्टैम्प + क्रिया को मिलाएं।
  </ParamField>

  <ParamField body="customer_id" type="string" required>
    Dodo Payments ग्राहक ID। यह एक वैध मौजूदा ग्राहक होना चाहिए।
  </ParamField>

  <ParamField body="event_name" type="string" required>
    आपके मीटर की घटना नाम से मेल खाता हुआ घटना प्रकार (केस-संवेदनशील)। उदाहरण: `api.call`, `image.generated`
  </ParamField>
</Accordion>

<Accordion title="Optional Fields">
  <ParamField body="timestamp" type="string">
    ISO 8601 समय-छाप। यदि छोड़ा गया तो डिफ़ॉल्ट सर्वर समय। देरी/बैच घटनाओं के लिए सटीक बिलिंग हेतु शामिल करें।
  </ParamField>

  <ParamField body="metadata" type="object">
    संग्रहण और फ़िल्टरिंग के लिए अतिरिक्त गुण:

    * संख्यात्मक मान: `bytes`, `tokens`, `duration_ms`
    * फ़िल्टर: `endpoint`, `method`, `quality`

    ```javascript theme={null}
    metadata: {
      endpoint: "/v1/orders",
      method: "POST",
      tokens: 1024
    }
    ```
  </ParamField>
</Accordion>

## इवेंट भेजना

<CodeGroup>
  ```javascript Single Event theme={null}
  await fetch('https://test.dodopayments.com/events/ingest', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.DODO_PAYMENTS_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      events: [{
        event_id: "api_call_1234",
        customer_id: "cus_abc123",
        event_name: "api.call",
        metadata: { endpoint: "/v1/orders" }
      }]
    })
  });
  ```

  ```javascript Batch Events theme={null}
  await fetch('https://test.dodopayments.com/events/ingest', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.DODO_PAYMENTS_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      events: [
        { event_id: "call_1", customer_id: "cus_abc", event_name: "api.call" },
        { event_id: "call_2", customer_id: "cus_abc", event_name: "api.call" },
        { event_id: "call_3", customer_id: "cus_abc", event_name: "api.call" }
      ]
    })
  });
  ```

  ```python Python theme={null}
  import requests

  requests.post(
      'https://test.dodopayments.com/events/ingest',
      headers={'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json'},
      json={'events': [{'event_id': 'call_1', 'customer_id': 'cus_abc', 'event_name': 'api.call'}]}
  )
  ```

  ```curl cURL theme={null}
  curl -X POST 'https://test.dodopayments.com/events/ingest' \
    -H 'Authorization: Bearer YOUR_API_KEY' \
    -H 'Content-Type: application/json' \
    -d '{"events": [{"event_id": "call_1", "customer_id": "cus_abc", "event_name": "api.call"}]}'
  ```
</CodeGroup>

<Tip>
  बेहतर प्रदर्शन के लिए प्रति अनुरोध अधिकतम 1,000 ईवेंट एकत्र करें। API प्रति कॉल 1,000 ईवेंट की एक सख्त सीमा लागू करता है।
</Tip>

## इनजेशन ब्लूप्रिंट्स

सामान्य उपयोग मामलों के लिए तैयार किए गए इवेंट पैटर्न। खरोंच से बनाने के बजाय एक सिद्ध ब्लूप्रिंट से शुरू करें।

<CardGroup cols={2}>
  <Card title="LLM Blueprint" icon="brain-circuit" href="/developer-resources/ingestion-blueprints/llm">
    OpenAI, Anthropic, Groq, Gemini और अन्य में AI टोकन उपयोग को ट्रैक करें।
  </Card>

  <Card title="API Gateway Blueprint" icon="cloud" href="/developer-resources/ingestion-blueprints/api-gateway">
    एंडपॉइंट फ़िल्टरिंग और दर सीमा समर्थन के साथ API अनुरोधों को मीटर करें।
  </Card>

  <Card title="Object Storage Blueprint" icon="box-archive" href="/developer-resources/ingestion-blueprints/object-storage">
    क्लाउड स्टोरेज सेवाओं के लिए फ़ाइल अपलोड और स्टोरेज खपत को ट्रैक करें।
  </Card>

  <Card title="Stream Blueprint" icon="tower-broadcast" href="/developer-resources/ingestion-blueprints/stream">
    वीडियो, ऑडियो और रीयल-टाइम डेटा के लिए स्ट्रीमिंग बैंडविड्थ को मापें।
  </Card>

  <Card title="Time Range Blueprint" icon="clock" href="/developer-resources/ingestion-blueprints/time-range">
    सर्वरलेस फ़ंक्शनों और कंप्यूट इंस्टेंस के लिए बीता समय के अनुसार बिल करें।
  </Card>

  <Card title="View All Blueprints" icon="copy" href="/features/usage-based-billing/ingestion-blueprints">
    विस्तृत कार्यान्वयन मार्गदर्शिकाओं के साथ सभी उपलब्ध ब्लूप्रिंट देखें।
  </Card>
</CardGroup>

## सर्वोत्तम प्रथाएँ

<AccordionGroup>
  <Accordion title="Use Unique Event IDs">
    नक़ल से बचने के लिए निश्चित ID का उपयोग करें: `${customerId}_${action}_${timestamp}`
  </Accordion>

  <Accordion title="Implement Retries">
    5xx त्रुटियों पर घातीय बैकऑफ़ के साथ पुन: प्रयास करें। 4xx त्रुटियों पर पुन: प्रयास न करें।
  </Accordion>

  <Accordion title="Include Timestamps">
    रीयल-टाइम घटनाओं के लिए छोड़ दें। देरी/बैच घटनाओं के लिए सटीकता हेतु शामिल करें।
  </Accordion>

  <Accordion title="Monitor Delivery">
    सफलता दरों को ट्रैक करें और पुन: प्रयास हेतु विफल घटनाओं को कतारबद्ध करें।
  </Accordion>
</AccordionGroup>

## समस्या निवारण

<AccordionGroup>
  <Accordion title="Events not appearing">
    * घटना नाम को मीटर से बिल्कुल मेल करना चाहिए (केस-संवेदनशील)
    * ग्राहक ID मौजूद होना चाहिए
    * जांचें कि मीटर फ़िल्टर घटनाओं को बाहर नहीं कर रहे हैं
    * सुनिश्चित करें कि समय-छाप हाल ही के हैं
  </Accordion>

  <Accordion title="Authentication errors (401)">
    API कुंजी सही है और स्वरूप का उपयोग करें: `Bearer YOUR_API_KEY`
  </Accordion>

  <Accordion title="Validation errors (400)">
    सुनिश्चित करें कि सभी आवश्यक फ़ील्ड मौजूद हैं: `event_id`, `customer_id`, `event_name`
  </Accordion>

  <Accordion title="Metadata not aggregating">
    * मेटाडेटा कुंजी को मीटर के "ओवर प्रॉपर्टी" से बिल्कुल मिलना चाहिए
    * स्ट्रिंग नहीं, संख्याएँ उपयोग करें: `tokens: 150` ना कि `tokens: "150"`
  </Accordion>
</AccordionGroup>

## अगले कदम

<CardGroup cols={2}>
  <Card title="Create Meters" icon="sliders" href="/features/usage-based-billing/meters">
    फ़िल्टर और एग्रीगेशन फ़ंक्शन के साथ यह परिभाषित करें कि आपकी घटनाएँ बिल योग्य मात्राओं में कैसे एकत्रित होती हैं।
  </Card>

  <Card title="Ingestion Blueprints" icon="copy" href="/features/usage-based-billing/ingestion-blueprints">
    LLM ट्रैकिंग, API गेटवे और स्टोरेज जैसे सामान्य उपयोग मामलों के लिए तैयार ब्लूप्रिंट का उपयोग करें।
  </Card>

  <Card title="Complete Tutorial" icon="code" href="/developer-resources/usage-based-billing-build-ai-image-generator">
    शुरू से उपयोग-आधारित बिलिंग के साथ पूर्ण AI इमेज जनरेटर बनाएं।
  </Card>

  <Card title="API Reference" icon="terminal" href="/api-reference/usage-events/ingest-events">
    सभी पैरामीटर, प्रतिक्रिया कोड और इंटरैक्टिव परीक्षण के साथ पूर्ण API दस्तावेज़।
  </Card>
</CardGroup>
