---
title: "Webhook एंडपॉइंट्स"
description: "प्रत्येक एंडपॉइंट के लिए सीक्रेट्स और इवेंट फ़िल्टर के साथ कई 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}/rotate-secret` | `admin+` | साइनिंग सीक्रेट बदलें |
| `POST` | `/v1/developer/webhook-endpoints/{endpoint_id}/test` | `admin+` | साइन की गई टेस्ट डिलीवरी भेजें |
| `GET` | `/v1/developer/webhook-deliveries` | `admin+` | हाल के एंडपॉइंट और लेगेसी डिलीवरी परिणामों की जाँच करें |

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

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

| फ़ील्ड | प्रकार | विवरण |
|-------|------|-------------|
| `id` | UUID | एंडपॉइंट आईडी |
| `label` | स्ट्रिंग | डिस्प्ले नाम, 1–120 कैरेक्टर |
| `url` | स्ट्रिंग | HTTPS URL; डेवलपमेंट के लिए `http://localhost` अनुमत है |
| `events` | स्ट्रिंग की ऐरे | सब्सक्राइब किए गए इवेंट प्रकार ([मान्य वैल्यू](#valid-event-types) देखें)। खाली ऐरे स्पष्ट रूप से चुने जाने वाले प्रति-टर्न इवेंट (`telephony.turn` / `web.turn`) को छोड़कर सभी इवेंट की सदस्यता लेती है |
| `status` | स्ट्रिंग | `active`, `disabled` (मैन्युअल रूप से पॉज़ किया गया), या `failing` (जब किसी डिलीवरी की 24 घंटे की रीट्राई शेड्यूल में एक भी 2xx नहीं मिलता, तब अपने-आप सेट होता है) |
| `agent_id` | पूर्णांक \| null | वह एजेंट जिस तक यह एंडपॉइंट सीमित है; `null` का अर्थ पूरे संगठन के लिए है |
| `agent_name` | स्ट्रिंग \| null | सीमित एजेंट का नाम, या संगठन-व्यापी एंडपॉइंट के लिए `null` |
| `secret_hint` | स्ट्रिंग | साइनिंग सीक्रेट के पहले 4 और आखिरी 4 कैरेक्टर, बीच में इलिप्सिस (`a1b2…9f0e`) के साथ — पूरा मान दिखाए बिना लोकली सेव किए गए सीक्रेट को क्रॉस-रेफरेंस करने के लिए पर्याप्त |
| `paused_at` | टाइमस्टैम्प \| null | वह समय जब ThunderPhone ने एंडपॉइंट को `failing` पर सेट किया। `active` या `disabled` होने पर `null` |
| `pause_last_error` | स्ट्रिंग | एंडपॉइंट पॉज़ होने पर आखिरी डिलीवरी एरर, उदाहरण के लिए `HTTP 503: Service Unavailable`। `failing` के अलावा खाली |
| `pause_undelivered_count` | पूर्णांक \| null | एंडपॉइंट की आखिरी सफल डिलीवरी के बाद से डिलीवर न हुए इवेंट, जिनकी गिनती पॉज़ होने पर की गई |
| `created_at`, `updated_at` | टाइमस्टैम्प | |

<Note>
  एंडपॉइंट का पूरा `secret` बनाते समय **एक बार** लौटाया जाता है और
  फिर कभी नहीं। इसे सुरक्षित रूप से स्टोर करें — यदि आप इसे खो देते हैं,
  तो नया पाने के लिए [इसे रोटेट करें](#rotate-the-signing-secret)।
</Note>

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

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

- `telephony.incoming`, `telephony.complete`, `telephony.tool`, `telephony.turn`
- `web.incoming`, `web.complete`, `web.tool`, `web.turn`
- `sms.sent`, `sms.failed`
- `sms.received` (आरक्षित; अभी तक एमिट नहीं किया गया)
- `call.graded`, `call.data_extracted`, `call.transfer_completed`
- `campaign.completed`
- `issue.reported`, `issue.escalated`
- `test-call.completed`
- `alert.triggered`

`issue.escalated` में कोई एजेंट कॉन्टेक्स्ट नहीं होता और इसे केवल
संगठन-व्यापी एंडपॉइंट्स पर डिलीवर किया जाता है।

`voice.ready` और `voice.failed` को स्पष्ट रूप से नहीं चुना जा सकता। इन्हें पाने के लिए,
`events: []` के साथ एक संगठन-व्यापी एंडपॉइंट बनाएं। एक खाली इवेंट सूची
`telephony.turn` और `web.turn` को छोड़कर हर समर्थित इवेंट प्राप्त करती है,
जिन्हें स्पष्ट रूप से चुनना आवश्यक है।

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

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

---

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

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

[एंडपॉइंट ऑब्जेक्ट्स](#endpoint-object) की एक array लौटाता है।
केवल उस एजेंट के लिए स्कोप किए गए एंडपॉइंट्स लौटाने के लिए `?agent_id=42` पास करें।

### एजेंट-स्कोप्ड एंडपॉइंट्स

संगठन-व्यापी एंडपॉइंट्स हर मैचिंग इवेंट प्राप्त करते हैं। `agent_id` वाला एंडपॉइंट
केवल उस एजेंट द्वारा संभाले गए कॉल्स के मैचिंग इवेंट्स प्राप्त करता है;
एजेंट कॉन्टेक्स्ट के बिना इवेंट्स, जैसे `alert.triggered`, उस तक कभी नहीं पहुंचते। आप
इन एंडपॉइंट्स को एजेंट बिल्डर के
**वेबहुक्स** सेक्शन से भी बना और मैनेज कर सकते हैं।

---

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

<CodeGroup>
```bash cURL
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
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` | ऐरे | नहीं | खाली/छोड़ा गया होने पर `telephony.turn` / `web.turn` को छोड़कर सभी इवेंट की सदस्यता ली जाती है, जिनके लिए स्पष्ट सदस्यता आवश्यक है। [मान्य इवेंट प्रकार](#valid-event-types) में सूचीबद्ध वैल्यू का उपयोग करना आवश्यक है; डुप्लिकेट हटा दिए जाते हैं |
| `agent_id` | इंटीजर \| null | नहीं | डिलीवरी को इस संगठन के किसी एजेंट तक सीमित करें; संगठन-व्यापी एंडपॉइंट के लिए छोड़ दें या `null` का उपयोग करें |

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

```json
{
  "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
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` सेट करें |
| `agent_id` | इंटीजर \| null | एंडपॉइंट को सीमित करने के लिए एजेंट आईडी सेट करें, या इसे संगठन-व्यापी बनाने के लिए `null` सेट करें |

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

---

## साइनिंग सीक्रेट रोटेट करें

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

<CodeGroup>
```bash cURL
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../rotate-secret \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```
</CodeGroup>

| फ़ील्ड | प्रकार | आवश्यक | विवरण |
|-------|------|----------|-------------|
| `include_copies` | बूलियन | नहीं | डिफ़ॉल्ट `true`। नए सीक्रेट को आपके संगठन के उन अन्य एंडपॉइंट्स को भी देता है जिनका URL और वर्तमान सीक्रेट समान है, जैसे अन्य एजेंट्स पर इस एंडपॉइंट की प्रतियां, ताकि एक रिसीवर एक ही सीक्रेट से वेरिफ़ाई करता रहे |

`200 OK` लौटाता है:

```json
{
  "endpoint": { "id": "c4d5e6f7-...", "secret_hint": "7f3a…c21d", "...": "..." },
  "secret": "7f3a90b2c4d5e6f708192a3b4c5d6e7f8091a2b3c4d5c21d",
  "rotated_endpoint_ids": ["c4d5e6f7-..."]
}
```

| फ़ील्ड | प्रकार | विवरण |
|-------|------|-------------|
| `endpoint` | ऑब्जेक्ट | नए `secret_hint` वाला [एंडपॉइंट ऑब्जेक्ट](#endpoint-object) |
| `secret` | स्ट्रिंग | नया साइनिंग सीक्रेट। केवल इस रिस्पॉन्स में लौटाया जाता है |
| `rotated_endpoint_ids` | UUID की ऐरे | हर एंडपॉइंट जो अब नए सीक्रेट का उपयोग करता है |

<Warning>
  पुराने सीक्रेट का उपयोग तुरंत बंद हो जाता है: अगली डिलीवरी,
  जिसमें रिट्राइ भी शामिल हैं, नए सीक्रेट से साइन की जाती है। जब तक आपके रिसीवर के पास
  नया सीक्रेट नहीं होता, डिलीवरी उसका सिग्नेचर चेक विफल करती हैं; यदि वह
  उन्हें गैर-2xx स्टेटस के साथ जवाब देता है, तो सामान्य 24 h
  शेड्यूल पर उनका रिट्राइ किया जाता है, इसलिए रिसीवर को तुरंत अपडेट करें। यदि आपका रिसीवर
  चरणों में रोल आउट होता है, तो रोलआउट के दौरान उसे दोनों सीक्रेट स्वीकार करने दें — SDK
  वेरिफ़िकेशन हेल्पर्स सीक्रेट्स की एक सूची लेते हैं (देखें
  [वेबहुक सिग्नेचर वेरिफ़ाई करें](/hi/guides/verify-webhook-signatures))।
</Warning>

---

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

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

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

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

```json
{
  "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
{
  "success": true,
  "event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
  "event_type": "webhook.test",
  "status": "delivered",
  "response_code": 204,
  "error": ""
}
```

`webhook.test` सिंथेटिक है और इसे किसी एंडपॉइंट की `events`
सब्सक्रिप्शन में नहीं जोड़ा जा सकता। अगर पहला प्रयास विफल होता है, तो ThunderPhone लगभग
एक मिनट बाद एक बार रीट्राई करता है और फिर रुक जाता है; डिलीवरी फिर
[डिलीवरी डीबग करें](#debug-deliveries) में `status: "failed"` दिखाती है। टेस्ट डिलीवरी कभी भी
एंडपॉइंट को `failing` के रूप में मार्क नहीं करती।

किसी वास्तविक इवेंट संरचना के विरुद्ध ट्रिगर कॉन्फ़िगर करने के लिए, वैकल्पिक
`event_type` पास करें। डिलीवरी फिर भी सिंथेटिक रहती है और इसमें `"sample": true` होता है;
कॉल-संबंधित सैंपल में `call_id: 0` और `agent_id: 0` का उपयोग होता है।

```bash
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../test \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"event_type":"call.graded"}'
```

`event_type`, [मान्य इवेंट प्रकारों](#valid-event-types) में से कोई भी वैल्यू स्वीकार करता है।
इसे छोड़ने पर सामान्य `webhook.test` व्यवहार बना रहता है।

---

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

<CodeGroup>
```bash cURL
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 पर डिलीवरी तुरंत रुक जाती है;
इन-फ्लाइट रीट्राई छोड़ दिए जाते हैं।

---

## डिलीवरी डीबग करें

यह निष्कर्ष निकालने से पहले कि कोई वेबहुक नहीं भेजा गया था,
[`GET /v1/developer/webhook-deliveries`](/api-reference/webhook-deliveries) देखें।
यह दोनों वेबहुक सिस्टम के हालिया प्रयास दिखाता है, जिनमें कॉल आईडी,
URL ओरिजिन, HTTP स्टेटस, प्रयासों की संख्या, अलाउलिस्टेड विफलता श्रेणी और अगला
रीट्राई समय शामिल हैं। यह कभी भी इवेंट पेलोड, ट्रांसक्रिप्ट, स्टोर किया गया एरर टेक्स्ट,
रिस्पॉन्स बॉडी या URL पाथ नहीं लौटाता।

आप यही हालिया हिस्ट्री **एजेंट्स → एक एजेंट चुनें → वेबहुक्स →
हालिया डिलीवरी** में भी देख सकते हैं। पंक्तियां एंडपॉइंट लेबल और नवीनतम
प्रयास द्वारा उपयोग किया गया URL ओरिजिन दिखाती हैं। यह अपरिवर्तनीय ऑडिट लॉग के बजाय
ऑपरेशनल स्टेट है: एंडपॉइंट हटाने पर उसकी डिलीवरी पंक्तियां भी हट जाती हैं।

n8n `404` के लिए, पहले पुष्टि करें कि वर्कफ़्लो सक्रिय है, `POST` स्वीकार करता है और
टेस्ट URL के बजाय प्रोडक्शन वेबहुक URL का उपयोग करता है। `401` या `403`
ऑथेंटिकेशन या सिग्नेचर वैलिडेशन की ओर संकेत करता है; टाइमआउट डेस्टिनेशन लेटेंसी
या उपलब्धता की ओर संकेत करते हैं; TLS एरर सर्टिफ़िकेट चेन, होस्टनेम या समाप्ति की ओर संकेत करते हैं।

---

## संबंधित

<CardGroup cols={2}>
  <Card title="इवेंट कैटलॉग" icon="list" href="/hi/webhooks/events">
    `events` वैल्यू की पूरी सूची, जिनकी आप सदस्यता ले सकते हैं।
  </Card>
  <Card title="वेबहुक्स अवलोकन" icon="bolt" href="/hi/webhooks/overview">
    सिग्नेचर वेरिफ़िकेशन और डिलीवरी सेमांटिक्स।
  </Card>
</CardGroup>
