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

# Webhook एंडपॉइंट्स

> हर एंडपॉइंट के लिए सीक्रेट्स और इवेंट फ़िल्टर्स के साथ कई webhook URLs प्रबंधित करें।

एंडपॉइंट-आधारित वेबहुक सिस्टम आपको प्रति संगठन **कई**
डेस्टिनेशन रजिस्टर करने देता है, जिनमें से प्रत्येक का अपना सीक्रेट, अपना
स्टेटस और इवेंट टाइप्स के एक सबसेट के लिए अपना सब्सक्रिप्शन होता है। सभी नए इंटीग्रेशन के लिए यही
अनुशंसित मॉडल है।

इसे [लीगेसी सिंगल-URL वेबहुक](/api-reference/organizations#legacy-single-url-webhook) से तुलना करें,
जिसे बैकवर्ड कंपैटिबिलिटी के लिए रखा गया है, लेकिन यह प्रति
संगठन केवल एक URL सपोर्ट करता है।

## एंडपॉइंट्स

| मेथड     | पाथ                                                  | आवश्यक भूमिका | विवरण                                    |
| -------- | ---------------------------------------------------- | ------------- | ---------------------------------------- |
| `GET`    | `/v1/developer/webhook-endpoints`                    | `admin+`      | एंडपॉइंट्स की सूची                       |
| `POST`   | `/v1/developer/webhook-endpoints`                    | `admin+`      | एक एंडपॉइंट बनाएं                        |
| `PATCH`  | `/v1/developer/webhook-endpoints/{endpoint_id}`      | `admin+`      | लेबल / URL / इवेंट्स / स्टेटस अपडेट करें |
| `DELETE` | `/v1/developer/webhook-endpoints/{endpoint_id}`      | `admin+`      | एक एंडपॉइंट हटाएं                        |
| `POST`   | `/v1/developer/webhook-endpoints/{endpoint_id}/test` | `admin+`      | एक साइन की गई टेस्ट डिलीवरी भेजें        |

## एंडपॉइंट ऑब्जेक्ट

```json theme={null}
{
  "id": "c4d5e6f7-...",
  "label": "Production — Call events",
  "url": "https://example.com/thunderphone/hook",
  "events": ["telephony.incoming", "telephony.complete"],
  "status": "active",
  "secret_hint": "a1b2…9f0e",
  "created_at": "2026-04-20T18:24:10.113Z",
  "updated_at": "2026-04-20T18:24:10.113Z"
}
```

| फ़ील्ड                     | टाइप            | विवरण                                                                                                                                                                            |
| -------------------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                       | UUID            | एंडपॉइंट id                                                                                                                                                                      |
| `label`                    | string          | डिस्प्ले नाम, 1–120 वर्ण                                                                                                                                                         |
| `url`                      | string          | HTTPS URL; डेवलपमेंट के लिए `http://localhost` अनुमत है                                                                                                                          |
| `events`                   | array of string | सब्सक्राइब किए गए इवेंट टाइप्स ([मान्य वैल्यूज़](#valid-event-types) देखें)। खाली ऐरे सभी इवेंट्स को सब्सक्राइब करता है                                                          |
| `status`                   | string          | `active`, `disabled` (मैन्युअली पॉज़ किया गया), या `failing` (जब कोई डिलीवरी एक भी 2xx के बिना अपना 24 h रिट्राई शेड्यूल समाप्त कर देती है, तब ऑटो-सेट होता है)                  |
| `secret_hint`              | string          | एलिप्सिस (`a1b2…9f0e`) के साथ साइनिंग सीक्रेट के पहले 4 और आखिरी 4 कैरेक्टर — पूरा वैल्यू एक्सपोज़ किए बिना, आपके लोकली सेव किए गए सीक्रेट को क्रॉस-रेफरेंस करने के लिए पर्याप्त |
| `created_at`, `updated_at` | timestamp       |                                                                                                                                                                                  |

<Note>
  एंडपॉइंट का पूरा `secret` बनाते समय **एक बार** रिटर्न किया जाता है और
  फिर कभी नहीं। इसे सुरक्षित रूप से स्टोर करें — यदि आप इसे खो देते हैं, तो एंडपॉइंट हटाएं
  और इसे दोबारा बनाएं।
</Note>

### मान्य इवेंट टाइप्स

`events` को इसी सटीक सेट के विरुद्ध वैलिडेट किया जाता है — सूची के बाहर की वैल्यूज़
`400` रिटर्न करती हैं। प्रत्येक टाइप के पेलोड शेप के लिए [इवेंट्स कैटलॉग](/hi/webhooks/events) देखें।

* `telephony.incoming`, `telephony.complete`, `telephony.tool`
* `web.incoming`, `web.complete`, `web.tool`
* `call.graded`
* `issue.reported`
* `test-call.completed`
* `alert.triggered`

### एंडपॉइंट स्टेटस

* `active` — डिलीवरी सामान्य रूप से जारी रहती हैं।
* `disabled` — `PATCH` के माध्यम से मैन्युअली पॉज़ किया गया। कोई रिक्वेस्ट नहीं भेजी जाती। हम
  कभी भी `disabled` एंडपॉइंट का स्टेटस नहीं बदलते; इसे वापस
  `active` पर करना हमेशा आपका निर्णय है।
* `failing` — जब एंडपॉइंट पर एक डिलीवरी बिना कभी 2xx पाए
  अपने पूरे रिट्राई शेड्यूल (24 घंटों में 8 प्रयास) को समाप्त कर देती है, तो यह ऑटोमैटिक रूप से सेट होता है। फेलिंग एंडपॉइंट को आगे कोई ट्रैफ़िक नहीं मिलता।
  एंडपॉइंट ठीक हो जाने पर, उसके स्टेटस को `PATCH` करके वापस `active` करें;
  जिन डिलीवरी का रिट्राई शेड्यूल अभी समाप्त नहीं हुआ है, वे वहीं से फिर शुरू होंगी
  जहाँ वे रुकी थीं।

***

## एंडपॉइंट्स की सूची

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.thunderphone.com/v1/developer/webhook-endpoints \
    -H "Authorization: Bearer sk_live_YOUR_API_KEY"
  ```
</CodeGroup>

[एंडपॉइंट ऑब्जेक्ट्स](#endpoint-object) का एक ऐरे रिटर्न करता है।

***

## एक एंडपॉइंट बनाएं

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints \
    -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "label":  "Production — Call events",
      "url":    "https://example.com/thunderphone/hook",
      "events": ["telephony.incoming", "telephony.complete"]
    }'
  ```

  ```python Python theme={null}
  result = requests.post(
      "https://api.thunderphone.com/v1/developer/webhook-endpoints",
      headers={"Authorization": "Bearer sk_live_YOUR_API_KEY"},
      json={
          "label":  "Production — Call events",
          "url":    "https://example.com/thunderphone/hook",
          "events": ["telephony.incoming", "telephony.complete"],
      },
  ).json()
  secret = result["secret"]
  endpoint_id = result["id"]
  ```
</CodeGroup>

### रिक्वेस्ट फ़ील्ड

| फ़ील्ड   | टाइप     | आवश्यक | विवरण                                                                                                                                                                   |
| -------- | -------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `label`  | स्ट्रिंग | हाँ    | 1–120 कैरेक्टर                                                                                                                                                          |
| `url`    | स्ट्रिंग | हाँ    | HTTPS URL (`http` केवल `localhost` / `127.0.0.1` के लिए अनुमति है)                                                                                                      |
| `events` | ऐरे      | नहीं   | खाली/छोड़ा गया होने पर सभी इवेंट्स की सदस्यता ली जाती है। [मान्य इवेंट प्रकार](#valid-event-types) में दिए गए मानों का उपयोग करना आवश्यक है; डुप्लिकेट हटा दिए जाते हैं |

[एंडपॉइंट ऑब्जेक्ट](#endpoint-object) के साथ `201 Created` लौटाता है, साथ ही
एक अतिरिक्त टॉप-लेवल `secret` फ़ील्ड भी लौटाता है जिसमें रॉ साइनिंग की होती है — एक
48-कैरेक्टर की हेक्स स्ट्रिंग:

```json theme={null}
{
  "id": "c4d5e6f7-…",
  "label": "Production — Call events",
  "url": "https://example.com/thunderphone/hook",
  "events": ["telephony.incoming", "telephony.complete"],
  "status": "active",
  "secret_hint": "a1b2…9f0e",
  "created_at": "2026-04-20T18:24:10.113Z",
  "updated_at": "2026-04-20T18:24:10.113Z",
  "secret": "a1b2c37e08d94f5b16a2c8d90e7f3a4b5c6d7e8f90a19f0e"
}
```

<Warning>
  `secret` **केवल निर्माण के समय** लौटाया जाता है। बाद के `GET` रिस्पॉन्स में
  केवल `secret_hint` शामिल होता है। रिस्पॉन्स बंद करने से पहले पूरा मान अपने सीक्रेट
  मैनेजर में कॉपी करें।
</Warning>

***

## एक एंडपॉइंट अपडेट करें

<CodeGroup>
  ```bash cURL theme={null}
  curl -X PATCH https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
    -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "label":  "Production — Call + Grade events",
      "events": ["telephony.incoming", "telephony.complete", "call.graded"]
    }'
  ```
</CodeGroup>

| फ़ील्ड   | टाइप     | विवरण                                                                                                                    |
| -------- | -------- | ------------------------------------------------------------------------------------------------------------------------ |
| `label`  | स्ट्रिंग |                                                                                                                          |
| `url`    | स्ट्रिंग |                                                                                                                          |
| `events` | ऐरे      |                                                                                                                          |
| `status` | स्ट्रिंग | `active` या `disabled`। सर्वर द्वारा `failing` के रूप में चिह्नित एंडपॉइंट को फिर से सक्षम करने के लिए `active` सेट करें |

अपडेट किए गए [एंडपॉइंट ऑब्जेक्ट](#endpoint-object) के साथ `200 OK` लौटाता है।

***

## टेस्ट डिलीवरी भेजें

कैनॉनिकल JSON सीरियलाइज़ेशन,
`X-ThunderPhone-Signature`, डिलीवरी रिकॉर्डिंग और रिट्राई बुककीपिंग सहित सामान्य
डिलीवरी पाइपलाइन का उपयोग करके एक एंडपॉइंट पर सिंथेटिक `webhook.test` इवेंट भेजें।
टेस्ट उसके `events` फ़िल्टर की परवाह किए बिना चुने गए एंडपॉइंट को टारगेट करता है।

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../test \
    -H "Authorization: Bearer sk_live_YOUR_API_KEY"
  ```
</CodeGroup>

एंडपॉइंट को इस तरह का एनवेलप मिलता है:

```json theme={null}
{
  "data": {
    "message": "ThunderPhone webhook test",
    "sent_at": "2026-07-17T20:12:34.567890+00:00"
  },
  "event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
  "type": "webhook.test"
}
```

डेस्टिनेशन द्वारा एरर लौटाने पर भी, API पहले प्रयास के बाद `200 OK` लौटाता है।
डिलीवरी परिणाम के लिए `success`, `status`, `response_code`, और `error`
जांचें:

```json theme={null}
{
  "success": true,
  "event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
  "event_type": "webhook.test",
  "status": "delivered",
  "response_code": 204,
  "error": ""
}
```

`webhook.test` सिंथेटिक है और इसे किसी एंडपॉइंट की `events`
सदस्यता में जोड़ा नहीं जा सकता। यदि पहला प्रयास विफल हो जाता है, तो डिलीवरी सामान्य
इवेंट डिलीवरी के समान रिट्राई शेड्यूल का पालन करती है।

***

## एंडपॉइंट हटाएं

<CodeGroup>
  ```bash cURL theme={null}
  curl -X DELETE https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
    -H "Authorization: Bearer sk_live_YOUR_API_KEY"
  ```
</CodeGroup>

`204 No Content` लौटाता है। URL पर डिलीवरी तुरंत बंद हो जाती है;
प्रगति में मौजूद रीट्राई छोड़ दिए जाते हैं।

***

## संबंधित

<CardGroup cols={2}>
  <Card title="इवेंट्स कैटलॉग" icon="list" href="/hi/webhooks/events">
    `events` वैल्यू की पूरी सूची, जिनकी आप सदस्यता ले सकते हैं।
  </Card>

  <Card title="वेबहुक्स अवलोकन" icon="bolt" href="/hi/webhooks/overview">
    सिग्नेचर वेरिफिकेशन और डिलीवरी सेमांटिक्स।
  </Card>
</CardGroup>
