[{"data":1,"prerenderedAt":1653},["ShallowReactive",2],{"guide-webhook-setup":3},{"id":4,"title":5,"body":6,"description":1645,"extension":1646,"meta":1647,"navigation":133,"path":1649,"seo":1650,"stem":1651,"__hash__":1652},"content/guides/webhook-setup.md","Webhook Setup",{"type":7,"value":8,"toc":1610},"minimal",[9,13,17,22,25,29,42,46,49,63,68,548,552,556,564,568,669,673,755,759,763,813,817,859,863,905,909,912,1028,1032,1039,1043,1153,1157,1269,1273,1276,1301,1304,1368,1372,1375,1390,1394,1398,1422,1426,1476,1480,1504,1508,1546,1550,1554,1568,1572,1587,1591,1606],[10,11,5],"h1",{"id":12},"webhook-setup",[14,15,16],"p",{},"Configure webhooks to receive real-time notifications about events.",[18,19,21],"h2",{"id":20},"what-are-webhooks","What are Webhooks?",[14,23,24],{},"Webhooks are HTTP callbacks that notify your application when events occur in the CHeKT platform. Instead of polling for changes, webhooks push data to your server in real-time.",[18,26,28],{"id":27},"prerequisites","Prerequisites",[30,31,32,36,39],"ul",{},[33,34,35],"li",{},"HTTPS endpoint (required for production)",[33,37,38],{},"Ability to respond within 5 seconds",[33,40,41],{},"Webhook secret for signature verification",[18,43,45],{"id":44},"creating-a-webhook-endpoint","Creating a Webhook Endpoint",[14,47,48],{},"Your endpoint must:",[30,50,51,54,57,60],{},[33,52,53],{},"Accept POST requests",[33,55,56],{},"Respond with 200 status on success",[33,58,59],{},"Verify webhook signatures",[33,61,62],{},"Process events asynchronously",[64,65,67],"h3",{"id":66},"example-endpoint-expressjs","Example Endpoint (Express.js)",[69,70,75],"pre",{"className":71,"code":72,"language":73,"meta":74,"style":74},"language-javascript shiki shiki-themes github-light github-dark","const express = require('express');\nconst crypto = require('crypto');\n\nconst app = express();\napp.use(express.json());\n\napp.post('/webhooks/chekt', (req, res) => {\n  const signature = req.headers['x-webhook-signature'];\n  const payload = JSON.stringify(req.body);\n\n  // Verify signature\n  const isValid = verifySignature(payload, signature, process.env.WEBHOOK_SECRET);\n\n  if (!isValid) {\n    return res.status(401).send('Invalid signature');\n  }\n\n  // Process event asynchronously\n  processEvent(req.body).catch(console.error);\n\n  // Respond immediately\n  res.status(200).send('OK');\n});\n\nfunction verifySignature(payload, signature, secret) {\n  const expected = crypto\n    .createHmac('sha256', secret)\n    .update(payload)\n    .digest('hex');\n\n  return signature === `sha256=${expected}`;\n}\n\napp.listen(3000);\n","javascript","",[76,77,78,109,128,135,150,168,173,208,228,250,255,262,283,288,303,333,339,344,350,365,370,376,400,406,411,437,450,467,478,493,498,522,528,533],"code",{"__ignoreMap":74},[79,80,83,87,91,94,98,102,106],"span",{"class":81,"line":82},"line",1,[79,84,86],{"class":85},"szBVR","const",[79,88,90],{"class":89},"sj4cs"," express",[79,92,93],{"class":85}," =",[79,95,97],{"class":96},"sScJk"," require",[79,99,101],{"class":100},"sVt8B","(",[79,103,105],{"class":104},"sZZnC","'express'",[79,107,108],{"class":100},");\n",[79,110,112,114,117,119,121,123,126],{"class":81,"line":111},2,[79,113,86],{"class":85},[79,115,116],{"class":89}," crypto",[79,118,93],{"class":85},[79,120,97],{"class":96},[79,122,101],{"class":100},[79,124,125],{"class":104},"'crypto'",[79,127,108],{"class":100},[79,129,131],{"class":81,"line":130},3,[79,132,134],{"emptyLinePlaceholder":133},true,"\n",[79,136,138,140,143,145,147],{"class":81,"line":137},4,[79,139,86],{"class":85},[79,141,142],{"class":89}," app",[79,144,93],{"class":85},[79,146,90],{"class":96},[79,148,149],{"class":100},"();\n",[79,151,153,156,159,162,165],{"class":81,"line":152},5,[79,154,155],{"class":100},"app.",[79,157,158],{"class":96},"use",[79,160,161],{"class":100},"(express.",[79,163,164],{"class":96},"json",[79,166,167],{"class":100},"());\n",[79,169,171],{"class":81,"line":170},6,[79,172,134],{"emptyLinePlaceholder":133},[79,174,176,178,181,183,186,189,193,196,199,202,205],{"class":81,"line":175},7,[79,177,155],{"class":100},[79,179,180],{"class":96},"post",[79,182,101],{"class":100},[79,184,185],{"class":104},"'/webhooks/chekt'",[79,187,188],{"class":100},", (",[79,190,192],{"class":191},"s4XuR","req",[79,194,195],{"class":100},", ",[79,197,198],{"class":191},"res",[79,200,201],{"class":100},") ",[79,203,204],{"class":85},"=>",[79,206,207],{"class":100}," {\n",[79,209,211,214,217,219,222,225],{"class":81,"line":210},8,[79,212,213],{"class":85},"  const",[79,215,216],{"class":89}," signature",[79,218,93],{"class":85},[79,220,221],{"class":100}," req.headers[",[79,223,224],{"class":104},"'x-webhook-signature'",[79,226,227],{"class":100},"];\n",[79,229,231,233,236,238,241,244,247],{"class":81,"line":230},9,[79,232,213],{"class":85},[79,234,235],{"class":89}," payload",[79,237,93],{"class":85},[79,239,240],{"class":89}," JSON",[79,242,243],{"class":100},".",[79,245,246],{"class":96},"stringify",[79,248,249],{"class":100},"(req.body);\n",[79,251,253],{"class":81,"line":252},10,[79,254,134],{"emptyLinePlaceholder":133},[79,256,258],{"class":81,"line":257},11,[79,259,261],{"class":260},"sJ8bj","  // Verify signature\n",[79,263,265,267,270,272,275,278,281],{"class":81,"line":264},12,[79,266,213],{"class":85},[79,268,269],{"class":89}," isValid",[79,271,93],{"class":85},[79,273,274],{"class":96}," verifySignature",[79,276,277],{"class":100},"(payload, signature, process.env.",[79,279,280],{"class":89},"WEBHOOK_SECRET",[79,282,108],{"class":100},[79,284,286],{"class":81,"line":285},13,[79,287,134],{"emptyLinePlaceholder":133},[79,289,291,294,297,300],{"class":81,"line":290},14,[79,292,293],{"class":85},"  if",[79,295,296],{"class":100}," (",[79,298,299],{"class":85},"!",[79,301,302],{"class":100},"isValid) {\n",[79,304,306,309,312,315,317,320,323,326,328,331],{"class":81,"line":305},15,[79,307,308],{"class":85},"    return",[79,310,311],{"class":100}," res.",[79,313,314],{"class":96},"status",[79,316,101],{"class":100},[79,318,319],{"class":89},"401",[79,321,322],{"class":100},").",[79,324,325],{"class":96},"send",[79,327,101],{"class":100},[79,329,330],{"class":104},"'Invalid signature'",[79,332,108],{"class":100},[79,334,336],{"class":81,"line":335},16,[79,337,338],{"class":100},"  }\n",[79,340,342],{"class":81,"line":341},17,[79,343,134],{"emptyLinePlaceholder":133},[79,345,347],{"class":81,"line":346},18,[79,348,349],{"class":260},"  // Process event asynchronously\n",[79,351,353,356,359,362],{"class":81,"line":352},19,[79,354,355],{"class":96},"  processEvent",[79,357,358],{"class":100},"(req.body).",[79,360,361],{"class":96},"catch",[79,363,364],{"class":100},"(console.error);\n",[79,366,368],{"class":81,"line":367},20,[79,369,134],{"emptyLinePlaceholder":133},[79,371,373],{"class":81,"line":372},21,[79,374,375],{"class":260},"  // Respond immediately\n",[79,377,379,382,384,386,389,391,393,395,398],{"class":81,"line":378},22,[79,380,381],{"class":100},"  res.",[79,383,314],{"class":96},[79,385,101],{"class":100},[79,387,388],{"class":89},"200",[79,390,322],{"class":100},[79,392,325],{"class":96},[79,394,101],{"class":100},[79,396,397],{"class":104},"'OK'",[79,399,108],{"class":100},[79,401,403],{"class":81,"line":402},23,[79,404,405],{"class":100},"});\n",[79,407,409],{"class":81,"line":408},24,[79,410,134],{"emptyLinePlaceholder":133},[79,412,414,417,419,421,424,426,429,431,434],{"class":81,"line":413},25,[79,415,416],{"class":85},"function",[79,418,274],{"class":96},[79,420,101],{"class":100},[79,422,423],{"class":191},"payload",[79,425,195],{"class":100},[79,427,428],{"class":191},"signature",[79,430,195],{"class":100},[79,432,433],{"class":191},"secret",[79,435,436],{"class":100},") {\n",[79,438,440,442,445,447],{"class":81,"line":439},26,[79,441,213],{"class":85},[79,443,444],{"class":89}," expected",[79,446,93],{"class":85},[79,448,449],{"class":100}," crypto\n",[79,451,453,456,459,461,464],{"class":81,"line":452},27,[79,454,455],{"class":100},"    .",[79,457,458],{"class":96},"createHmac",[79,460,101],{"class":100},[79,462,463],{"class":104},"'sha256'",[79,465,466],{"class":100},", secret)\n",[79,468,470,472,475],{"class":81,"line":469},28,[79,471,455],{"class":100},[79,473,474],{"class":96},"update",[79,476,477],{"class":100},"(payload)\n",[79,479,481,483,486,488,491],{"class":81,"line":480},29,[79,482,455],{"class":100},[79,484,485],{"class":96},"digest",[79,487,101],{"class":100},[79,489,490],{"class":104},"'hex'",[79,492,108],{"class":100},[79,494,496],{"class":81,"line":495},30,[79,497,134],{"emptyLinePlaceholder":133},[79,499,501,504,507,510,513,516,519],{"class":81,"line":500},31,[79,502,503],{"class":85},"  return",[79,505,506],{"class":100}," signature ",[79,508,509],{"class":85},"===",[79,511,512],{"class":104}," `sha256=${",[79,514,515],{"class":100},"expected",[79,517,518],{"class":104},"}`",[79,520,521],{"class":100},";\n",[79,523,525],{"class":81,"line":524},32,[79,526,527],{"class":100},"}\n",[79,529,531],{"class":81,"line":530},33,[79,532,134],{"emptyLinePlaceholder":133},[79,534,536,538,541,543,546],{"class":81,"line":535},34,[79,537,155],{"class":100},[79,539,540],{"class":96},"listen",[79,542,101],{"class":100},[79,544,545],{"class":89},"3000",[79,547,108],{"class":100},[18,549,551],{"id":550},"registering-a-webhook","Registering a Webhook",[64,553,555],{"id":554},"api-endpoint","API Endpoint",[69,557,562],{"className":558,"code":560,"language":561},[559],"language-text","POST /partner/v1/webhooks\n","text",[76,563,560],{"__ignoreMap":74},[64,565,567],{"id":566},"request-example","Request Example",[69,569,573],{"className":570,"code":571,"language":572,"meta":74,"style":74},"language-bash shiki shiki-themes github-light github-dark","curl -X POST https://api.chekt.com/partner/v1/webhooks \\\n  -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://your-app.com/webhooks/chekt\",\n    \"events\": [\n      \"alarm.triggered\",\n      \"alarm.cleared\",\n      \"device.status_changed\",\n      \"site.armed\",\n      \"site.disarmed\"\n    ],\n    \"secret\": \"your_webhook_secret_key\"\n  }'\n","bash",[76,574,575,592,602,611,619,624,629,634,639,644,649,654,659,664],{"__ignoreMap":74},[79,576,577,580,583,586,589],{"class":81,"line":82},[79,578,579],{"class":96},"curl",[79,581,582],{"class":89}," -X",[79,584,585],{"class":104}," POST",[79,587,588],{"class":104}," https://api.chekt.com/partner/v1/webhooks",[79,590,591],{"class":89}," \\\n",[79,593,594,597,600],{"class":81,"line":111},[79,595,596],{"class":89},"  -H",[79,598,599],{"class":104}," \"Authorization: Bearer YOUR_ACCESS_TOKEN\"",[79,601,591],{"class":89},[79,603,604,606,609],{"class":81,"line":130},[79,605,596],{"class":89},[79,607,608],{"class":104}," \"Content-Type: application/json\"",[79,610,591],{"class":89},[79,612,613,616],{"class":81,"line":137},[79,614,615],{"class":89},"  -d",[79,617,618],{"class":104}," '{\n",[79,620,621],{"class":81,"line":152},[79,622,623],{"class":104},"    \"url\": \"https://your-app.com/webhooks/chekt\",\n",[79,625,626],{"class":81,"line":170},[79,627,628],{"class":104},"    \"events\": [\n",[79,630,631],{"class":81,"line":175},[79,632,633],{"class":104},"      \"alarm.triggered\",\n",[79,635,636],{"class":81,"line":210},[79,637,638],{"class":104},"      \"alarm.cleared\",\n",[79,640,641],{"class":81,"line":230},[79,642,643],{"class":104},"      \"device.status_changed\",\n",[79,645,646],{"class":81,"line":252},[79,647,648],{"class":104},"      \"site.armed\",\n",[79,650,651],{"class":81,"line":257},[79,652,653],{"class":104},"      \"site.disarmed\"\n",[79,655,656],{"class":81,"line":264},[79,657,658],{"class":104},"    ],\n",[79,660,661],{"class":81,"line":285},[79,662,663],{"class":104},"    \"secret\": \"your_webhook_secret_key\"\n",[79,665,666],{"class":81,"line":290},[79,667,668],{"class":104},"  }'\n",[64,670,672],{"id":671},"response","Response",[69,674,677],{"className":675,"code":676,"language":164,"meta":74,"style":74},"language-json shiki shiki-themes github-light github-dark","{\n  \"webhook_id\": \"webhook_abc123\",\n  \"url\": \"https://your-app.com/webhooks/chekt\",\n  \"events\": [\"alarm.triggered\", \"alarm.cleared\"],\n  \"status\": \"active\",\n  \"created_at\": \"2024-01-15T10:30:00Z\"\n}\n",[76,678,679,684,698,710,729,741,751],{"__ignoreMap":74},[79,680,681],{"class":81,"line":82},[79,682,683],{"class":100},"{\n",[79,685,686,689,692,695],{"class":81,"line":111},[79,687,688],{"class":89},"  \"webhook_id\"",[79,690,691],{"class":100},": ",[79,693,694],{"class":104},"\"webhook_abc123\"",[79,696,697],{"class":100},",\n",[79,699,700,703,705,708],{"class":81,"line":130},[79,701,702],{"class":89},"  \"url\"",[79,704,691],{"class":100},[79,706,707],{"class":104},"\"https://your-app.com/webhooks/chekt\"",[79,709,697],{"class":100},[79,711,712,715,718,721,723,726],{"class":81,"line":137},[79,713,714],{"class":89},"  \"events\"",[79,716,717],{"class":100},": [",[79,719,720],{"class":104},"\"alarm.triggered\"",[79,722,195],{"class":100},[79,724,725],{"class":104},"\"alarm.cleared\"",[79,727,728],{"class":100},"],\n",[79,730,731,734,736,739],{"class":81,"line":152},[79,732,733],{"class":89},"  \"status\"",[79,735,691],{"class":100},[79,737,738],{"class":104},"\"active\"",[79,740,697],{"class":100},[79,742,743,746,748],{"class":81,"line":170},[79,744,745],{"class":89},"  \"created_at\"",[79,747,691],{"class":100},[79,749,750],{"class":104},"\"2024-01-15T10:30:00Z\"\n",[79,752,753],{"class":81,"line":175},[79,754,527],{"class":100},[18,756,758],{"id":757},"available-events","Available Events",[64,760,762],{"id":761},"alarm-events","Alarm Events",[764,765,766,779],"table",{},[767,768,769],"thead",{},[770,771,772,776],"tr",{},[773,774,775],"th",{},"Event",[773,777,778],{},"Description",[780,781,782,793,803],"tbody",{},[770,783,784,790],{},[785,786,787],"td",{},[76,788,789],{},"alarm.triggered",[785,791,792],{},"Alarm was triggered",[770,794,795,800],{},[785,796,797],{},[76,798,799],{},"alarm.cleared",[785,801,802],{},"Alarm was cleared",[770,804,805,810],{},[785,806,807],{},[76,808,809],{},"alarm.acknowledged",[785,811,812],{},"Alarm was acknowledged by operator",[64,814,816],{"id":815},"device-events","Device Events",[764,818,819,827],{},[767,820,821],{},[770,822,823,825],{},[773,824,775],{},[773,826,778],{},[780,828,829,839,849],{},[770,830,831,836],{},[785,832,833],{},[76,834,835],{},"device.status_changed",[785,837,838],{},"Device status changed",[770,840,841,846],{},[785,842,843],{},[76,844,845],{},"device.registered",[785,847,848],{},"New device registered",[770,850,851,856],{},[785,852,853],{},[76,854,855],{},"device.removed",[785,857,858],{},"Device was removed",[64,860,862],{"id":861},"site-events","Site Events",[764,864,865,873],{},[767,866,867],{},[770,868,869,871],{},[773,870,775],{},[773,872,778],{},[780,874,875,885,895],{},[770,876,877,882],{},[785,878,879],{},[76,880,881],{},"site.armed",[785,883,884],{},"Site was armed",[770,886,887,892],{},[785,888,889],{},[76,890,891],{},"site.disarmed",[785,893,894],{},"Site was disarmed",[770,896,897,902],{},[785,898,899],{},[76,900,901],{},"site.created",[785,903,904],{},"New site created",[18,906,908],{"id":907},"webhook-payload","Webhook Payload",[14,910,911],{},"All webhooks include:",[69,913,915],{"className":675,"code":914,"language":164,"meta":74,"style":74},"{\n  \"event\": \"alarm.triggered\",\n  \"webhook_id\": \"webhook_abc123\",\n  \"timestamp\": \"2024-01-15T14:20:00Z\",\n  \"data\": {\n    \"alarm_id\": \"alarm_xyz789\",\n    \"site_id\": \"site_123\",\n    \"device_id\": \"device_456\",\n    \"severity\": \"high\",\n    \"zone\": \"Front Door\"\n  }\n}\n",[76,916,917,921,932,942,954,962,974,986,998,1010,1020,1024],{"__ignoreMap":74},[79,918,919],{"class":81,"line":82},[79,920,683],{"class":100},[79,922,923,926,928,930],{"class":81,"line":111},[79,924,925],{"class":89},"  \"event\"",[79,927,691],{"class":100},[79,929,720],{"class":104},[79,931,697],{"class":100},[79,933,934,936,938,940],{"class":81,"line":130},[79,935,688],{"class":89},[79,937,691],{"class":100},[79,939,694],{"class":104},[79,941,697],{"class":100},[79,943,944,947,949,952],{"class":81,"line":137},[79,945,946],{"class":89},"  \"timestamp\"",[79,948,691],{"class":100},[79,950,951],{"class":104},"\"2024-01-15T14:20:00Z\"",[79,953,697],{"class":100},[79,955,956,959],{"class":81,"line":152},[79,957,958],{"class":89},"  \"data\"",[79,960,961],{"class":100},": {\n",[79,963,964,967,969,972],{"class":81,"line":170},[79,965,966],{"class":89},"    \"alarm_id\"",[79,968,691],{"class":100},[79,970,971],{"class":104},"\"alarm_xyz789\"",[79,973,697],{"class":100},[79,975,976,979,981,984],{"class":81,"line":175},[79,977,978],{"class":89},"    \"site_id\"",[79,980,691],{"class":100},[79,982,983],{"class":104},"\"site_123\"",[79,985,697],{"class":100},[79,987,988,991,993,996],{"class":81,"line":210},[79,989,990],{"class":89},"    \"device_id\"",[79,992,691],{"class":100},[79,994,995],{"class":104},"\"device_456\"",[79,997,697],{"class":100},[79,999,1000,1003,1005,1008],{"class":81,"line":230},[79,1001,1002],{"class":89},"    \"severity\"",[79,1004,691],{"class":100},[79,1006,1007],{"class":104},"\"high\"",[79,1009,697],{"class":100},[79,1011,1012,1015,1017],{"class":81,"line":252},[79,1013,1014],{"class":89},"    \"zone\"",[79,1016,691],{"class":100},[79,1018,1019],{"class":104},"\"Front Door\"\n",[79,1021,1022],{"class":81,"line":257},[79,1023,338],{"class":100},[79,1025,1026],{"class":81,"line":264},[79,1027,527],{"class":100},[18,1029,1031],{"id":1030},"signature-verification","Signature Verification",[1033,1034,1036],"alert",{"type":1035},"warning",[14,1037,1038],{},"Always verify webhook signatures to ensure authenticity.",[64,1040,1042],{"id":1041},"python-example","Python Example",[69,1044,1048],{"className":1045,"code":1046,"language":1047,"meta":74,"style":74},"language-python shiki shiki-themes github-light github-dark","import hmac\nimport hashlib\n\ndef verify_webhook_signature(payload, signature, secret):\n    expected = hmac.new(\n        secret.encode(),\n        payload.encode(),\n        hashlib.sha256\n    ).hexdigest()\n\n    return hmac.compare_digest(\n        f\"sha256={expected}\",\n        signature\n    )\n","python",[76,1049,1050,1058,1065,1069,1080,1091,1096,1101,1106,1111,1115,1122,1143,1148],{"__ignoreMap":74},[79,1051,1052,1055],{"class":81,"line":82},[79,1053,1054],{"class":85},"import",[79,1056,1057],{"class":100}," hmac\n",[79,1059,1060,1062],{"class":81,"line":111},[79,1061,1054],{"class":85},[79,1063,1064],{"class":100}," hashlib\n",[79,1066,1067],{"class":81,"line":130},[79,1068,134],{"emptyLinePlaceholder":133},[79,1070,1071,1074,1077],{"class":81,"line":137},[79,1072,1073],{"class":85},"def",[79,1075,1076],{"class":96}," verify_webhook_signature",[79,1078,1079],{"class":100},"(payload, signature, secret):\n",[79,1081,1082,1085,1088],{"class":81,"line":152},[79,1083,1084],{"class":100},"    expected ",[79,1086,1087],{"class":85},"=",[79,1089,1090],{"class":100}," hmac.new(\n",[79,1092,1093],{"class":81,"line":170},[79,1094,1095],{"class":100},"        secret.encode(),\n",[79,1097,1098],{"class":81,"line":175},[79,1099,1100],{"class":100},"        payload.encode(),\n",[79,1102,1103],{"class":81,"line":210},[79,1104,1105],{"class":100},"        hashlib.sha256\n",[79,1107,1108],{"class":81,"line":230},[79,1109,1110],{"class":100},"    ).hexdigest()\n",[79,1112,1113],{"class":81,"line":252},[79,1114,134],{"emptyLinePlaceholder":133},[79,1116,1117,1119],{"class":81,"line":257},[79,1118,308],{"class":85},[79,1120,1121],{"class":100}," hmac.compare_digest(\n",[79,1123,1124,1127,1130,1133,1135,1138,1141],{"class":81,"line":264},[79,1125,1126],{"class":85},"        f",[79,1128,1129],{"class":104},"\"sha256=",[79,1131,1132],{"class":89},"{",[79,1134,515],{"class":100},[79,1136,1137],{"class":89},"}",[79,1139,1140],{"class":104},"\"",[79,1142,697],{"class":100},[79,1144,1145],{"class":81,"line":285},[79,1146,1147],{"class":100},"        signature\n",[79,1149,1150],{"class":81,"line":290},[79,1151,1152],{"class":100},"    )\n",[64,1154,1156],{"id":1155},"nodejs-example","Node.js Example",[69,1158,1160],{"className":71,"code":1159,"language":73,"meta":74,"style":74},"const crypto = require('crypto');\n\nfunction verifyWebhookSignature(payload, signature, secret) {\n  const expected = crypto\n    .createHmac('sha256', secret)\n    .update(payload)\n    .digest('hex');\n\n  return signature === `sha256=${expected}`;\n}\n",[76,1161,1162,1178,1182,1203,1213,1225,1233,1245,1249,1265],{"__ignoreMap":74},[79,1163,1164,1166,1168,1170,1172,1174,1176],{"class":81,"line":82},[79,1165,86],{"class":85},[79,1167,116],{"class":89},[79,1169,93],{"class":85},[79,1171,97],{"class":96},[79,1173,101],{"class":100},[79,1175,125],{"class":104},[79,1177,108],{"class":100},[79,1179,1180],{"class":81,"line":111},[79,1181,134],{"emptyLinePlaceholder":133},[79,1183,1184,1186,1189,1191,1193,1195,1197,1199,1201],{"class":81,"line":130},[79,1185,416],{"class":85},[79,1187,1188],{"class":96}," verifyWebhookSignature",[79,1190,101],{"class":100},[79,1192,423],{"class":191},[79,1194,195],{"class":100},[79,1196,428],{"class":191},[79,1198,195],{"class":100},[79,1200,433],{"class":191},[79,1202,436],{"class":100},[79,1204,1205,1207,1209,1211],{"class":81,"line":137},[79,1206,213],{"class":85},[79,1208,444],{"class":89},[79,1210,93],{"class":85},[79,1212,449],{"class":100},[79,1214,1215,1217,1219,1221,1223],{"class":81,"line":152},[79,1216,455],{"class":100},[79,1218,458],{"class":96},[79,1220,101],{"class":100},[79,1222,463],{"class":104},[79,1224,466],{"class":100},[79,1226,1227,1229,1231],{"class":81,"line":170},[79,1228,455],{"class":100},[79,1230,474],{"class":96},[79,1232,477],{"class":100},[79,1234,1235,1237,1239,1241,1243],{"class":81,"line":175},[79,1236,455],{"class":100},[79,1238,485],{"class":96},[79,1240,101],{"class":100},[79,1242,490],{"class":104},[79,1244,108],{"class":100},[79,1246,1247],{"class":81,"line":210},[79,1248,134],{"emptyLinePlaceholder":133},[79,1250,1251,1253,1255,1257,1259,1261,1263],{"class":81,"line":230},[79,1252,503],{"class":85},[79,1254,506],{"class":100},[79,1256,509],{"class":85},[79,1258,512],{"class":104},[79,1260,515],{"class":100},[79,1262,518],{"class":104},[79,1264,521],{"class":100},[79,1266,1267],{"class":81,"line":252},[79,1268,527],{"class":100},[18,1270,1272],{"id":1271},"testing-webhooks","Testing Webhooks",[14,1274,1275],{},"Use the webhook testing endpoint:",[69,1277,1279],{"className":570,"code":1278,"language":572,"meta":74,"style":74},"curl -X POST https://api.chekt.com/partner/v1/webhooks/webhook_abc123/test \\\n  -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n",[76,1280,1281,1294],{"__ignoreMap":74},[79,1282,1283,1285,1287,1289,1292],{"class":81,"line":82},[79,1284,579],{"class":96},[79,1286,582],{"class":89},[79,1288,585],{"class":104},[79,1290,1291],{"class":104}," https://api.chekt.com/partner/v1/webhooks/webhook_abc123/test",[79,1293,591],{"class":89},[79,1295,1296,1298],{"class":81,"line":111},[79,1297,596],{"class":89},[79,1299,1300],{"class":104}," \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n",[14,1302,1303],{},"This sends a test event to your endpoint:",[69,1305,1307],{"className":675,"code":1306,"language":164,"meta":74,"style":74},"{\n  \"event\": \"webhook.test\",\n  \"webhook_id\": \"webhook_abc123\",\n  \"timestamp\": \"2024-01-15T14:20:00Z\",\n  \"data\": {\n    \"message\": \"This is a test webhook\"\n  }\n}\n",[76,1308,1309,1313,1324,1334,1344,1350,1360,1364],{"__ignoreMap":74},[79,1310,1311],{"class":81,"line":82},[79,1312,683],{"class":100},[79,1314,1315,1317,1319,1322],{"class":81,"line":111},[79,1316,925],{"class":89},[79,1318,691],{"class":100},[79,1320,1321],{"class":104},"\"webhook.test\"",[79,1323,697],{"class":100},[79,1325,1326,1328,1330,1332],{"class":81,"line":130},[79,1327,688],{"class":89},[79,1329,691],{"class":100},[79,1331,694],{"class":104},[79,1333,697],{"class":100},[79,1335,1336,1338,1340,1342],{"class":81,"line":137},[79,1337,946],{"class":89},[79,1339,691],{"class":100},[79,1341,951],{"class":104},[79,1343,697],{"class":100},[79,1345,1346,1348],{"class":81,"line":152},[79,1347,958],{"class":89},[79,1349,961],{"class":100},[79,1351,1352,1355,1357],{"class":81,"line":170},[79,1353,1354],{"class":89},"    \"message\"",[79,1356,691],{"class":100},[79,1358,1359],{"class":104},"\"This is a test webhook\"\n",[79,1361,1362],{"class":81,"line":175},[79,1363,338],{"class":100},[79,1365,1366],{"class":81,"line":210},[79,1367,527],{"class":100},[18,1369,1371],{"id":1370},"retry-logic","Retry Logic",[14,1373,1374],{},"If your endpoint fails to respond with 200:",[1376,1377,1378,1381,1384,1387],"ol",{},[33,1379,1380],{},"First retry: After 5 seconds",[33,1382,1383],{},"Second retry: After 30 seconds",[33,1385,1386],{},"Third retry: After 5 minutes",[33,1388,1389],{},"Webhook disabled: After 3 consecutive failures",[18,1391,1393],{"id":1392},"managing-webhooks","Managing Webhooks",[64,1395,1397],{"id":1396},"list-webhooks","List Webhooks",[69,1399,1401],{"className":570,"code":1400,"language":572,"meta":74,"style":74},"curl -X GET https://api.chekt.com/partner/v1/webhooks \\\n  -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n",[76,1402,1403,1416],{"__ignoreMap":74},[79,1404,1405,1407,1409,1412,1414],{"class":81,"line":82},[79,1406,579],{"class":96},[79,1408,582],{"class":89},[79,1410,1411],{"class":104}," GET",[79,1413,588],{"class":104},[79,1415,591],{"class":89},[79,1417,1418,1420],{"class":81,"line":111},[79,1419,596],{"class":89},[79,1421,1300],{"class":104},[64,1423,1425],{"id":1424},"update-webhook","Update Webhook",[69,1427,1429],{"className":570,"code":1428,"language":572,"meta":74,"style":74},"curl -X PATCH https://api.chekt.com/partner/v1/webhooks/webhook_abc123 \\\n  -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"events\": [\"alarm.triggered\", \"device.status_changed\"]\n  }'\n",[76,1430,1431,1445,1453,1461,1467,1472],{"__ignoreMap":74},[79,1432,1433,1435,1437,1440,1443],{"class":81,"line":82},[79,1434,579],{"class":96},[79,1436,582],{"class":89},[79,1438,1439],{"class":104}," PATCH",[79,1441,1442],{"class":104}," https://api.chekt.com/partner/v1/webhooks/webhook_abc123",[79,1444,591],{"class":89},[79,1446,1447,1449,1451],{"class":81,"line":111},[79,1448,596],{"class":89},[79,1450,599],{"class":104},[79,1452,591],{"class":89},[79,1454,1455,1457,1459],{"class":81,"line":130},[79,1456,596],{"class":89},[79,1458,608],{"class":104},[79,1460,591],{"class":89},[79,1462,1463,1465],{"class":81,"line":137},[79,1464,615],{"class":89},[79,1466,618],{"class":104},[79,1468,1469],{"class":81,"line":152},[79,1470,1471],{"class":104},"    \"events\": [\"alarm.triggered\", \"device.status_changed\"]\n",[79,1473,1474],{"class":81,"line":170},[79,1475,668],{"class":104},[64,1477,1479],{"id":1478},"delete-webhook","Delete Webhook",[69,1481,1483],{"className":570,"code":1482,"language":572,"meta":74,"style":74},"curl -X DELETE https://api.chekt.com/partner/v1/webhooks/webhook_abc123 \\\n  -H \"Authorization: Bearer YOUR_ACCESS_TOKEN\"\n",[76,1484,1485,1498],{"__ignoreMap":74},[79,1486,1487,1489,1491,1494,1496],{"class":81,"line":82},[79,1488,579],{"class":96},[79,1490,582],{"class":89},[79,1492,1493],{"class":104}," DELETE",[79,1495,1442],{"class":104},[79,1497,591],{"class":89},[79,1499,1500,1502],{"class":81,"line":111},[79,1501,596],{"class":89},[79,1503,1300],{"class":104},[18,1505,1507],{"id":1506},"best-practices","Best Practices",[30,1509,1510,1517,1522,1528,1534,1540],{},[33,1511,1512,1516],{},[1513,1514,1515],"strong",{},"HTTPS Only",": Use HTTPS in production",[33,1518,1519,1521],{},[1513,1520,1031],{},": Always verify signatures",[33,1523,1524,1527],{},[1513,1525,1526],{},"Async Processing",": Process events asynchronously",[33,1529,1530,1533],{},[1513,1531,1532],{},"Idempotency",": Handle duplicate events gracefully",[33,1535,1536,1539],{},[1513,1537,1538],{},"Error Logging",": Log all webhook failures",[33,1541,1542,1545],{},[1513,1543,1544],{},"Monitoring",": Set up alerts for webhook failures",[18,1547,1549],{"id":1548},"troubleshooting","Troubleshooting",[64,1551,1553],{"id":1552},"webhook-not-receiving-events","Webhook Not Receiving Events",[1376,1555,1556,1559,1562,1565],{},[33,1557,1558],{},"Check webhook status is \"active\"",[33,1560,1561],{},"Verify endpoint is accessible",[33,1563,1564],{},"Test with manual trigger",[33,1566,1567],{},"Check firewall settings",[64,1569,1571],{"id":1570},"signature-verification-failing","Signature Verification Failing",[1376,1573,1574,1577,1580],{},[33,1575,1576],{},"Ensure using correct secret",[33,1578,1579],{},"Verify payload is not modified",[33,1581,1582,1583,1586],{},"Check signature format (",[76,1584,1585],{},"sha256=...",")",[18,1588,1590],{"id":1589},"next-steps","Next Steps",[30,1592,1593,1600],{},[33,1594,1595],{},[1596,1597,1599],"a",{"href":1598},"/docs/api","View API Reference",[33,1601,1602],{},[1596,1603,1605],{"href":1604},"/guides/error-handling","Error Handling Guide",[1607,1608,1609],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":74,"searchDepth":130,"depth":130,"links":1611},[1612,1613,1614,1617,1622,1627,1628,1632,1633,1634,1639,1640,1644],{"id":20,"depth":111,"text":21},{"id":27,"depth":111,"text":28},{"id":44,"depth":111,"text":45,"children":1615},[1616],{"id":66,"depth":130,"text":67},{"id":550,"depth":111,"text":551,"children":1618},[1619,1620,1621],{"id":554,"depth":130,"text":555},{"id":566,"depth":130,"text":567},{"id":671,"depth":130,"text":672},{"id":757,"depth":111,"text":758,"children":1623},[1624,1625,1626],{"id":761,"depth":130,"text":762},{"id":815,"depth":130,"text":816},{"id":861,"depth":130,"text":862},{"id":907,"depth":111,"text":908},{"id":1030,"depth":111,"text":1031,"children":1629},[1630,1631],{"id":1041,"depth":130,"text":1042},{"id":1155,"depth":130,"text":1156},{"id":1271,"depth":111,"text":1272},{"id":1370,"depth":111,"text":1371},{"id":1392,"depth":111,"text":1393,"children":1635},[1636,1637,1638],{"id":1396,"depth":130,"text":1397},{"id":1424,"depth":130,"text":1425},{"id":1478,"depth":130,"text":1479},{"id":1506,"depth":111,"text":1507},{"id":1548,"depth":111,"text":1549,"children":1641},[1642,1643],{"id":1552,"depth":130,"text":1553},{"id":1570,"depth":130,"text":1571},{"id":1589,"depth":111,"text":1590},"Configure webhooks for real-time notifications","md",{"category":1648,"order":170},"Advanced Topics","/guides/webhook-setup",{"title":5,"description":1645},"guides/webhook-setup","33QPti8S3FHvXKNWOWc2ezhgtMQ-oc-Z7EQJAa4qW3E",1770959187629]