# वेबहुक

वेबहुक आपके HTTPS प्राप्तकर्ता को भेजी वैकल्पिक हस्ताक्षरित सूचना है। स्थिति पूछना उपलब्ध रहता है; API के लिए वेबहुक लगाना आवश्यक नहीं।

## मेरा API खाता

API खाते में प्राप्तकर्ता चालू करें। सार्वजनिक HTTPS/443 आवश्यक है; रीडायरेक्ट, क्वेरी पैरामीटर और URL क्रेडेंशियल समर्थित नहीं। पता, सक्रियता या कुंजी बदलने पर पुरानी लंबित घटनाएँ रद्द होती हैं। पुरानी कार्रवाइयाँ दोबारा नहीं भेजी जातीं।

केवल समर्थित नए API कार्य देखे जाते हैं, हर HTTP उत्तर या वेबसाइट खरीद नहीं। सूचना में सुरक्षित पहचान और स्थिति होती है, API कुंजी या प्रॉक्सी पासवर्ड नहीं। timestamp स्थानीय UTC निरीक्षण है; मिनट वाले कार्य से देरी हो सकती है।

## घटना प्रकार

| प्रकार | स्थिति |
| --- | --- |
| `webhook.test` | `test` |
| `order.accepted` | `accepted` |
| `order.delivered` | `delivered` |
| `order.action_required` | `action_required` |
| `order.canceled` | `canceled` |
| `renewal.completed` | `completed` |
| `extra_login.operation.completed` | `completed` |
| `extra_login.operation.rejected` | `rejected` |
| `extra_login.operation.action_required` | `action_required` |
| `proxy_ip.operation.completed` | `completed` |
| `proxy_ip.operation.rejected` | `rejected` |
| `proxy_ip.operation.action_required` | `action_required` |
| `proxy_ip.authorization.revoked` | `revoked` |
| `residential_list.operation.completed` | `completed` |
| `residential_list.operation.rejected` | `rejected` |
| `residential_list.operation.action_required` | `action_required` |
| `auto_renewal.configuration.completed` | `completed` |

```json
{
    "id": "evt_0123456789abcdef0123456789abcdef",
    "type": "order.delivered",
    "timestamp": "2026-10-26T12:00:00+00:00",
    "api_version": "1",
    "data": {
        "account_id": 12345,
        "order_id": 12345,
        "number": "1000012345",
        "product": "proxy",
        "state": "delivered",
        "quantity": 1,
        "mode": null,
        "gb": null,
        "reason_code": null,
        "provider_live_check": false
    }
}
```

## हस्ताक्षर सत्यापन

अलग वेबहुक कुंजी से webhook-id, webhook-timestamp और webhook-signature सत्यापित करें। whsec_ हटाएँ, कुंजी Base64 डिकोड करें, नीचे के सटीक मूल बॉडी प्रारूप पर HMAC-SHA256 लगाएँ और स्थिर समय में तुलना करें। 300 सेकंड की समय सीमा रखें।

```text
signed_content = webhook_id + "." + webhook_timestamp + "." + raw_body
webhook_signature = "v1," + Base64(HMAC_SHA256(decoded_secret, signed_content))
```

## डिलीवरी और पुनः प्रयास

हर घटना ID को एक ही प्रभाव के साथ संसाधित करें। सूचनाएँ दोहर सकती हैं और क्रम से बाहर आ सकती हैं। स्वीकारने पर 2xx दें। अधिकतम 7 प्रयास, अंतराल 1 मिनट, 5 मिनट, 30 मिनट, 2 घंटे, 6 घंटे और 24 घंटे। केवल सूचना दोहरती है, मूल कार्रवाई नहीं।

HTTP 2xx डिलीवरी की पुष्टि है। 408/429/5xx और अस्थायी नेटवर्क त्रुटि दोहर सकती हैं; अन्य 4xx और रीडायरेक्ट स्थायी विफलता हैं। फिर भेजने पर घटना ID और बॉडी समान, हस्ताक्षर समय नया होता है।

---
[ARNPROXY API](https://docs.arnproxy.com/hi/api-v1/webhooks)
