[{"data":1,"prerenderedAt":3515},["ShallowReactive",2],{"navigation":3,"/developers/webhooks":506,"/developers/webhooks-surround":3510},[4,66,204,292,339,402,450,482],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"Whitepaper","i-lucide-file-text","/whitepaper","1.whitepaper",[10,13,17,22,27,32,37,42,47,51,56,61],{"title":5,"path":7,"stem":11,"icon":12},"1.whitepaper/index","i-heroicons-document-text",{"title":14,"path":15,"stem":16,"icon":12},"Executive Summary","/whitepaper/executive-summary","1.whitepaper/1.executive-summary",{"title":18,"path":19,"stem":20,"icon":21},"Investment Opportunity","/whitepaper/investment-opportunity","1.whitepaper/10.investment-opportunity","i-heroicons-banknotes",{"title":23,"path":24,"stem":25,"icon":26},"Risk Analysis","/whitepaper/risk-analysis","1.whitepaper/11.risk-analysis","i-lucide-shield-alert",{"title":28,"path":29,"stem":30,"icon":31},"Problem Statement","/whitepaper/problem-statement","1.whitepaper/2.problem-statement","i-heroicons-exclamation-triangle",{"title":33,"path":34,"stem":35,"icon":36},"Solution Overview","/whitepaper/solution-overview","1.whitepaper/3.solution-overview","i-heroicons-light-bulb",{"title":38,"path":39,"stem":40,"icon":41},"Market Opportunity","/whitepaper/market-opportunity","1.whitepaper/4.market-opportunity","i-heroicons-chart-bar",{"title":43,"path":44,"stem":45,"icon":46},"Technology Architecture","/whitepaper/technology-architecture","1.whitepaper/5.technology-architecture","i-heroicons-cog",{"title":48,"path":49,"stem":50,"icon":21},"Business Model","/whitepaper/business-model","1.whitepaper/6.business-model",{"title":52,"path":53,"stem":54,"icon":55},"Competitive Advantages","/whitepaper/competitive-advantages","1.whitepaper/7.competitive-advantages","i-heroicons-rocket-launch",{"title":57,"path":58,"stem":59,"icon":60},"Roadmap & Milestones","/whitepaper/roadmap-milestones","1.whitepaper/8.roadmap-milestones","i-heroicons-map",{"title":62,"path":63,"stem":64,"icon":65},"Team & Advisors","/whitepaper/team-advisors","1.whitepaper/9.team-advisors","i-heroicons-users",{"title":67,"icon":68,"path":69,"stem":70,"children":71},"Techniques","i-lucide-graduation-cap","/techniques","2.techniques",[72,75,107,139,171],{"title":67,"path":69,"stem":73,"icon":74},"2.techniques/index","i-heroicons-academic-cap",{"title":76,"path":77,"stem":78,"children":79,"icon":81,"parent":70,"order":82},"Remote Viewing","/techniques/remote-viewing","2.techniques/1.remote-viewing/index",[80,83,88,93,98,103],{"title":76,"path":77,"stem":78,"icon":81,"parent":70,"order":82},"i-lucide-eye",1,{"title":84,"path":85,"stem":86,"icon":87},"Controlled Remote Viewing (CRV)","/techniques/remote-viewing/controlled-remote-viewing-crv","2.techniques/1.remote-viewing/1.controlled-remote-viewing-crv","i-heroicons-clipboard-document-check",{"title":89,"path":90,"stem":91,"icon":92},"Scientific Remote Viewing (SRV)","/techniques/remote-viewing/scientific-remote-viewing-srv","2.techniques/1.remote-viewing/2.scientific-remote-viewing-srv","i-lucide-microscope",{"title":94,"path":95,"stem":96,"icon":97},"Technical Remote Viewing (TRV)","/techniques/remote-viewing/technical-remote-viewing-trv","2.techniques/1.remote-viewing/3.technical-remote-viewing-trv","i-heroicons-cog-6-tooth",{"title":99,"path":100,"stem":101,"icon":102},"Extended Remote Viewing (ERV)","/techniques/remote-viewing/extended-remote-viewing-erv","2.techniques/1.remote-viewing/4.extended-remote-viewing-erv","i-heroicons-arrows-pointing-out",{"title":104,"path":105,"stem":106,"icon":74},"RV Training & Development","/techniques/remote-viewing/rv-training-development","2.techniques/1.remote-viewing/5.rv-training-development",{"title":108,"path":109,"stem":110,"children":111,"icon":113,"parent":70,"order":114},"Dowsing","/techniques/dowsing","2.techniques/2.dowsing/index",[112,115,120,125,130,134],{"title":108,"path":109,"stem":110,"icon":113,"parent":70,"order":114},"i-lucide-compass",2,{"title":116,"path":117,"stem":118,"icon":119},"Pendulum Dowsing","/techniques/dowsing/pendulum-dowsing","2.techniques/2.dowsing/1.pendulum-dowsing","i-heroicons-clock",{"title":121,"path":122,"stem":123,"icon":124},"L-Rods Dowsing","/techniques/dowsing/l-rods-dowsing","2.techniques/2.dowsing/2.l-rods-dowsing","i-heroicons-adjustments-horizontal",{"title":126,"path":127,"stem":128,"icon":129},"Y-Rods Dowsing","/techniques/dowsing/y-rods-dowsing","2.techniques/2.dowsing/3.y-rods-dowsing","i-lucide-git-fork",{"title":131,"path":132,"stem":133,"icon":60},"Map Dowsing","/techniques/dowsing/map-dowsing","2.techniques/2.dowsing/4.map-dowsing",{"title":135,"path":136,"stem":137,"icon":138},"Information Dowsing","/techniques/dowsing/information-dowsing","2.techniques/2.dowsing/5.information-dowsing","i-heroicons-question-mark-circle",{"title":140,"path":141,"stem":142,"children":143,"icon":145,"parent":70,"order":146},"ESP Development","/techniques/esp-development","2.techniques/3.esp-development/index",[144,147,152,157,162,167],{"title":140,"path":141,"stem":142,"icon":145,"parent":70,"order":146},"i-lucide-brain",3,{"title":148,"path":149,"stem":150,"icon":151},"Telepathy Training","/techniques/esp-development/telepathy-training","2.techniques/3.esp-development/1.telepathy-training","i-heroicons-chat-bubble-left-right",{"title":153,"path":154,"stem":155,"icon":156},"Clairvoyance Development","/techniques/esp-development/clairvoyance-development","2.techniques/3.esp-development/2.clairvoyance-development","i-heroicons-eye",{"title":158,"path":159,"stem":160,"icon":161},"Clairaudience Practice","/techniques/esp-development/clairaudience-practice","2.techniques/3.esp-development/3.clairaudience-practice","i-heroicons-speaker-wave",{"title":163,"path":164,"stem":165,"icon":166},"Clairsentience Enhancement","/techniques/esp-development/clairsentience-enhancement","2.techniques/3.esp-development/4.clairsentience-enhancement","i-heroicons-hand-raised",{"title":168,"path":169,"stem":170,"icon":119},"Precognition Exercises","/techniques/esp-development/precognition-exercises","2.techniques/3.esp-development/5.precognition-exercises",{"title":172,"path":173,"stem":174,"children":175,"icon":177,"parent":70,"order":178},"Other Techniques","/techniques/other-techniques","2.techniques/4.other-techniques/index",[176,179,184,189,194,199],{"title":172,"path":173,"stem":174,"icon":177,"parent":70,"order":178},"i-lucide-sparkles",4,{"title":180,"path":181,"stem":182,"icon":183},"Tarot Reading","/techniques/other-techniques/tarot-reading","2.techniques/4.other-techniques/1.tarot-reading","i-heroicons-rectangle-stack",{"title":185,"path":186,"stem":187,"icon":188},"Astrology Applications","/techniques/other-techniques/astrology-applications","2.techniques/4.other-techniques/2.astrology-applications","i-heroicons-star",{"title":190,"path":191,"stem":192,"icon":193},"Numerology Methods","/techniques/other-techniques/numerology-methods","2.techniques/4.other-techniques/3.numerology-methods","i-heroicons-calculator",{"title":195,"path":196,"stem":197,"icon":198},"Scrying Practices","/techniques/other-techniques/scrying-practices","2.techniques/4.other-techniques/4.scrying-practices","i-heroicons-globe-americas",{"title":200,"path":201,"stem":202,"icon":203},"Meditation & Focus","/techniques/other-techniques/meditation-focus","2.techniques/4.other-techniques/5.meditation-focus","i-heroicons-sun",{"title":205,"icon":206,"path":207,"stem":208,"children":209},"Use Cases","i-lucide-briefcase","/use-cases","3.use-cases",[210,213,218,223,228,233,239,244,249,253,258,263,269,274,280,286],{"title":205,"path":207,"stem":211,"icon":212},"3.use-cases/index","i-heroicons-briefcase",{"title":214,"path":215,"stem":216,"icon":217,"parent":208,"order":82},"Missing Persons Applications","/use-cases/missing-persons","3.use-cases/1.missing-persons","i-heroicons-user-group",{"title":219,"path":220,"stem":221,"icon":41,"parent":208,"order":222},"Market Intelligence","/use-cases/market-intelligence","3.use-cases/10.market-intelligence",10,{"title":224,"path":225,"stem":226,"icon":21,"parent":208,"order":227},"Investment Opportunities","/use-cases/investment-opportunities","3.use-cases/11.investment-opportunities",11,{"title":229,"path":230,"stem":231,"icon":65,"parent":208,"order":232},"Competitive Analysis","/use-cases/competitive-analysis","3.use-cases/12.competitive-analysis",12,{"title":234,"path":235,"stem":236,"icon":237,"parent":208,"order":238},"Personal Guidance","/use-cases/personal-guidance","3.use-cases/13.personal-guidance","i-heroicons-heart",13,{"title":240,"path":241,"stem":242,"icon":74,"parent":208,"order":243},"Skill Development","/use-cases/skill-development","3.use-cases/14.skill-development",14,{"title":245,"path":246,"stem":247,"icon":60,"parent":208,"order":248},"Life Decisions","/use-cases/life-decisions","3.use-cases/15.life-decisions",15,{"title":250,"path":251,"stem":252,"icon":21,"parent":208,"order":114},"FBI Reward Cases","/use-cases/fbi-reward-cases","3.use-cases/2.fbi-reward-cases",{"title":254,"path":255,"stem":256,"icon":257,"parent":208,"order":146},"Success Stories","/use-cases/success-stories","3.use-cases/3.success-stories","i-heroicons-trophy",{"title":259,"path":260,"stem":261,"icon":262,"parent":208,"order":178},"Most Wanted Fugitives","/use-cases/most-wanted-fugitives","3.use-cases/4.most-wanted-fugitives","i-heroicons-finger-print",{"title":264,"path":265,"stem":266,"icon":267,"parent":208,"order":268},"Criminal Investigations","/use-cases/criminal-investigations","3.use-cases/5.criminal-investigations","i-heroicons-shield-check",5,{"title":270,"path":271,"stem":272,"icon":119,"parent":208,"order":273},"Cold Case Solutions","/use-cases/cold-case-solutions","3.use-cases/6.cold-case-solutions",6,{"title":275,"path":276,"stem":277,"icon":278,"parent":208,"order":279},"Archaeological Discoveries","/use-cases/archaeological-discoveries","3.use-cases/7.archaeological-discoveries","i-heroicons-building-library",7,{"title":281,"path":282,"stem":283,"icon":284,"parent":208,"order":285},"Historical Site Location","/use-cases/historical-site-location","3.use-cases/8.historical-site-location","i-heroicons-map-pin",8,{"title":287,"path":288,"stem":289,"icon":290,"parent":208,"order":291},"Ancient Artifact Finding","/use-cases/ancient-artifact-finding","3.use-cases/9.ancient-artifact-finding","i-heroicons-gift",9,{"title":293,"icon":294,"path":295,"stem":296,"children":297},"Investors","i-lucide-dollar-sign","/investors","4.investors",[298,300,304,307,311,316,321,325,330,335],{"title":293,"path":295,"stem":299,"icon":21},"4.investors/index",{"title":301,"path":302,"stem":303,"icon":41,"parent":296,"order":82},"Investment Overview","/investors/investment-overview","4.investors/1.investment-overview",{"title":38,"path":305,"stem":306,"icon":198,"parent":296,"order":114},"/investors/market-opportunity","4.investors/2.market-opportunity",{"title":308,"path":309,"stem":310,"icon":267,"parent":296,"order":146},"Competitive Advantage","/investors/competitive-advantage","4.investors/3.competitive-advantage",{"title":312,"path":313,"stem":314,"icon":315,"parent":296,"order":178},"Financial Projections","/investors/financial-projections","4.investors/4.financial-projections","i-lucide-trending-up",{"title":317,"path":318,"stem":319,"icon":320,"parent":296,"order":268},"Key Metrics","/investors/key-metrics","4.investors/5.key-metrics","i-heroicons-chart-pie",{"title":322,"path":323,"stem":324,"icon":21,"parent":296,"order":273},"Use of Funds","/investors/use-of-funds","4.investors/6.use-of-funds",{"title":326,"path":327,"stem":328,"icon":329,"parent":296,"order":279},"Investment Process","/investors/investment-process","4.investors/7.investment-process","i-heroicons-arrow-path",{"title":331,"path":332,"stem":333,"icon":334,"parent":296,"order":285},"Partnership Opportunities","/investors/partnership-opportunities","4.investors/8.partnership-opportunities","i-lucide-handshake",{"title":336,"path":337,"stem":338,"icon":138,"parent":296,"order":291},"Frequently Asked Questions","/investors/faq","4.investors/9.faq",{"title":340,"icon":341,"path":342,"stem":343,"children":344},"Developers","i-lucide-code","/developers","5.developers",[345,348,352,357,361,366,371,376,380,384,389,394,398],{"title":340,"path":342,"stem":346,"icon":347},"5.developers/index","i-heroicons-code-bracket",{"title":349,"path":350,"stem":351,"icon":55,"parent":343,"order":82},"Getting Started","/developers/getting-started","5.developers/1.getting-started",{"title":353,"path":354,"stem":355,"icon":356,"order":222},"Troubleshooting","/developers/troubleshooting","5.developers/10.troubleshooting","i-heroicons-wrench-screwdriver",{"title":358,"path":359,"stem":360,"icon":12,"order":227},"Changelog","/developers/changelog","5.developers/11.changelog",{"title":362,"path":363,"stem":364,"icon":365,"order":232},"Support","/developers/support","5.developers/12.support","i-heroicons-lifebuoy",{"title":367,"path":368,"stem":369,"icon":370,"parent":343,"order":114},"Platform Overview","/developers/platform-overview","5.developers/2.platform-overview","i-heroicons-cube",{"title":372,"path":373,"stem":374,"icon":375,"parent":343,"order":146},"Authentication","/developers/authentication","5.developers/3.authentication","i-heroicons-key",{"title":377,"path":378,"stem":379,"icon":347,"order":178},"API Reference","/developers/api-reference","5.developers/4.api-reference",{"title":381,"path":382,"stem":383,"icon":370,"order":268},"SDKs & Libraries","/developers/sdks","5.developers/5.sdks",{"title":385,"path":386,"stem":387,"icon":388,"order":273},"Webhooks","/developers/webhooks","5.developers/6.webhooks","i-heroicons-bell",{"title":390,"path":391,"stem":392,"icon":393,"order":279},"Integration Guides","/developers/integration-guides","5.developers/7.integration-guides","i-heroicons-puzzle-piece",{"title":395,"path":396,"stem":397,"icon":356,"order":285},"Developer Tools","/developers/developer-tools","5.developers/8.developer-tools",{"title":399,"path":400,"stem":401,"icon":36,"order":291},"Best Practices","/developers/best-practices","5.developers/9.best-practices",{"title":403,"icon":404,"path":405,"stem":406,"children":407},"Research","i-lucide-search","/research","6.research",[408,410,414,419,423,428,432,437,441,446],{"title":403,"path":405,"stem":409,"icon":92},"6.research/index",{"title":411,"path":412,"stem":413,"icon":92,"parent":406,"order":82},"Research Overview","/research/research-overview","6.research/1.research-overview",{"title":415,"path":416,"stem":417,"icon":418,"parent":406,"order":114},"Methodology Validation","/research/methodology-validation","6.research/2.methodology-validation","i-heroicons-check-circle",{"title":420,"path":421,"stem":422,"icon":55,"order":146},"Stargate Project Research","/research/stargate-project","6.research/3.stargate-project",{"title":424,"path":425,"stem":426,"icon":427,"order":178},"Government Programs Research","/research/government-programs","6.research/4.government-programs","i-heroicons-building-office",{"title":429,"path":430,"stem":431,"icon":257,"order":268},"Historical Success Cases","/research/historical-success-cases","6.research/5.historical-success-cases",{"title":433,"path":434,"stem":435,"icon":436,"order":273},"Ongoing Research","/research/ongoing-research","6.research/6.ongoing-research","i-heroicons-beaker",{"title":438,"path":439,"stem":440,"icon":74,"order":279},"Academic Partnerships","/research/academic-partnerships","6.research/7.academic-partnerships",{"title":442,"path":443,"stem":444,"icon":445,"order":285},"Future Research Directions","/research/future-research","6.research/8.future-research","i-heroicons-sparkles",{"title":447,"path":448,"stem":449,"icon":12,"order":291},"Publications","/research/publications","6.research/9.publications",{"title":451,"icon":452,"path":453,"stem":454,"children":455},"Specifications","i-lucide-settings","/specifications","7.specifications",[456,458,462,466,470,474,478],{"title":451,"path":453,"stem":457,"icon":97},"7.specifications/index",{"title":459,"path":460,"stem":461},"Technical Specifications","/specifications/technical-specifications","7.specifications/1.technical-specifications",{"title":463,"path":464,"stem":465},"API Endpoints Reference","/specifications/api-endpoints","7.specifications/2.api-endpoints",{"title":467,"path":468,"stem":469},"Data Models & Schemas","/specifications/data-models","7.specifications/3.data-models",{"title":471,"path":472,"stem":473},"Integration Requirements","/specifications/integration-requirements","7.specifications/4.integration-requirements",{"title":475,"path":476,"stem":477},"Compliance & Standards","/specifications/compliance-standards","7.specifications/5.compliance-standards",{"title":479,"path":480,"stem":481},"Dir","/specifications/_dir","7.specifications/_dir",{"title":483,"icon":484,"path":485,"stem":486,"children":487},"Resources","i-lucide-book-open","/resources","8.resources",[488,491,495,498,502],{"title":483,"path":485,"stem":489,"icon":490},"8.resources/index","i-heroicons-book-open",{"title":492,"path":493,"stem":494},"Glossary","/resources/glossary","8.resources/1.glossary",{"title":336,"path":496,"stem":497},"/resources/faqs","8.resources/2.faqs",{"title":499,"path":500,"stem":501},"Downloads & Resources","/resources/downloads","8.resources/3.downloads",{"title":503,"path":504,"stem":505},"Community & Support","/resources/community","8.resources/4.community",{"id":507,"title":385,"body":508,"description":3503,"extension":3504,"links":3505,"meta":3506,"navigation":3507,"path":386,"seo":3508,"stem":387,"__hash__":3509},"docs/5.developers/6.webhooks.md",{"type":509,"value":510,"toc":3454},"minimark",[511,516,520,524,529,564,568,594,598,618,622,648,652,672,676,680,683,942,946,949,1065,1069,1072,1101,1105,1108,1309,1313,1317,1611,1614,1906,1909,2216,2220,2224,2227,2349,2353,2356,2364,2368,2379,2382,2386,2389,2463,2467,2470,2535,2539,2542,2614,2618,2621,2701,2705,2708,2807,2814,2818,2822,2850,2854,2920,2924,2952,2956,2960,2963,3048,3052,3055,3134,3138,3141,3144,3211,3214,3282,3285,3289,3357,3361,3364,3388,3392,3395,3409,3412,3415,3450],[512,513,515],"h2",{"id":514},"overview","Overview",[517,518,519],"p",{},"Webhooks enable real-time notifications from MindPeeker to your application when specific events occur. Instead of continuously polling the API for status updates, you can receive instant notifications when sessions complete, analyses finish, or other important events happen.",[512,521,523],{"id":522},"supported-events","Supported Events",[525,526,528],"h3",{"id":527},"session-events","Session Events",[530,531,532,540,546,552,558],"ul",{},[533,534,535,539],"li",{},[536,537,538],"code",{},"session.created"," - New session initiated",[533,541,542,545],{},[536,543,544],{},"session.started"," - Session processing began",[533,547,548,551],{},[536,549,550],{},"session.completed"," - Session finished successfully",[533,553,554,557],{},[536,555,556],{},"session.failed"," - Session failed or was cancelled",[533,559,560,563],{},[536,561,562],{},"session.progress_updated"," - Session progress updated (every 10%)",[525,565,567],{"id":566},"analysis-events","Analysis Events",[530,569,570,576,582,588],{},[533,571,572,575],{},[536,573,574],{},"analysis.created"," - New analysis queued",[533,577,578,581],{},[536,579,580],{},"analysis.started"," - Analysis processing began",[533,583,584,587],{},[536,585,586],{},"analysis.completed"," - Analysis completed successfully",[533,589,590,593],{},[536,591,592],{},"analysis.failed"," - Analysis failed",[525,595,597],{"id":596},"dowsing-events","Dowsing Events",[530,599,600,606,612],{},[533,601,602,605],{},[536,603,604],{},"dowsing.query_created"," - New dowsing query submitted",[533,607,608,611],{},[536,609,610],{},"dowsing.query_completed"," - Dowsing query completed",[533,613,614,617],{},[536,615,616],{},"dowsing.query_failed"," - Dowsing query failed",[525,619,621],{"id":620},"account-events","Account Events",[530,623,624,630,636,642],{},[533,625,626,629],{},[536,627,628],{},"account.subscription_updated"," - Subscription plan changed",[533,631,632,635],{},[536,633,634],{},"account.usage_threshold_reached"," - Usage limit approaching",[533,637,638,641],{},[536,639,640],{},"account.payment_succeeded"," - Payment processed successfully",[533,643,644,647],{},[536,645,646],{},"account.payment_failed"," - Payment failed",[525,649,651],{"id":650},"system-events","System Events",[530,653,654,660,666],{},[533,655,656,659],{},[536,657,658],{},"system.maintenance_scheduled"," - Scheduled maintenance announced",[533,661,662,665],{},[536,663,664],{},"system.service_disruption"," - Service disruption detected",[533,667,668,671],{},[536,669,670],{},"system.security_alert"," - Security-related notification",[512,673,675],{"id":674},"setting-up-webhooks","Setting Up Webhooks",[525,677,679],{"id":678},"_1-create-webhook-endpoint","1. Create Webhook Endpoint",[517,681,682],{},"Create an HTTPS endpoint in your application that can receive POST requests:",[684,685,690],"pre",{"className":686,"code":687,"language":688,"meta":689,"style":689},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// Express.js example\nconst express = require('express');\nconst crypto = require('crypto');\nconst app = express();\n\napp.use(express.raw({ type: 'application/json' }));\n\napp.post('/webhook', (req, res) => {\n  const signature = req.headers['x-mindpeeker-signature'];\n  const payload = req.body;\n  \n  // Verify webhook signature (recommended)\n  const expectedSignature = crypto\n    .createHmac('sha256', process.env.WEBHOOK_SECRET)\n    .update(payload)\n    .digest('hex');\n    \n  if (signature !== `sha256=${expectedSignature}`) {\n    return res.status(401).send('Invalid signature');\n  }\n  \n  try {\n    const event = JSON.parse(payload);\n    \n    // Handle different event types\n    switch (event.type) {\n      case 'session.completed':\n        handleSessionCompleted(event.data);\n        break;\n      case 'analysis.completed':\n        handleAnalysisCompleted(event.data);\n        break;\n      // ... other event types\n    }\n    \n    res.status(200).send('OK');\n  } catch (error) {\n    console.error('Webhook processing error:', error);\n    res.status(500).send('Internal server error');\n  }\n});\n\napp.listen(3000, () => {\n  console.log('Webhook server running on port 3000');\n});\n","javascript","",[536,691,692,699,704,709,714,720,725,729,734,739,744,749,754,759,764,769,775,781,787,793,799,804,810,816,821,827,833,839,845,851,857,863,868,874,880,885,891,897,903,909,914,920,925,931,937],{"__ignoreMap":689},[693,694,696],"span",{"class":695,"line":82},"line",[693,697,698],{},"// Express.js example\n",[693,700,701],{"class":695,"line":114},[693,702,703],{},"const express = require('express');\n",[693,705,706],{"class":695,"line":146},[693,707,708],{},"const crypto = require('crypto');\n",[693,710,711],{"class":695,"line":178},[693,712,713],{},"const app = express();\n",[693,715,716],{"class":695,"line":268},[693,717,719],{"emptyLinePlaceholder":718},true,"\n",[693,721,722],{"class":695,"line":273},[693,723,724],{},"app.use(express.raw({ type: 'application/json' }));\n",[693,726,727],{"class":695,"line":279},[693,728,719],{"emptyLinePlaceholder":718},[693,730,731],{"class":695,"line":285},[693,732,733],{},"app.post('/webhook', (req, res) => {\n",[693,735,736],{"class":695,"line":291},[693,737,738],{},"  const signature = req.headers['x-mindpeeker-signature'];\n",[693,740,741],{"class":695,"line":222},[693,742,743],{},"  const payload = req.body;\n",[693,745,746],{"class":695,"line":227},[693,747,748],{},"  \n",[693,750,751],{"class":695,"line":232},[693,752,753],{},"  // Verify webhook signature (recommended)\n",[693,755,756],{"class":695,"line":238},[693,757,758],{},"  const expectedSignature = crypto\n",[693,760,761],{"class":695,"line":243},[693,762,763],{},"    .createHmac('sha256', process.env.WEBHOOK_SECRET)\n",[693,765,766],{"class":695,"line":248},[693,767,768],{},"    .update(payload)\n",[693,770,772],{"class":695,"line":771},16,[693,773,774],{},"    .digest('hex');\n",[693,776,778],{"class":695,"line":777},17,[693,779,780],{},"    \n",[693,782,784],{"class":695,"line":783},18,[693,785,786],{},"  if (signature !== `sha256=${expectedSignature}`) {\n",[693,788,790],{"class":695,"line":789},19,[693,791,792],{},"    return res.status(401).send('Invalid signature');\n",[693,794,796],{"class":695,"line":795},20,[693,797,798],{},"  }\n",[693,800,802],{"class":695,"line":801},21,[693,803,748],{},[693,805,807],{"class":695,"line":806},22,[693,808,809],{},"  try {\n",[693,811,813],{"class":695,"line":812},23,[693,814,815],{},"    const event = JSON.parse(payload);\n",[693,817,819],{"class":695,"line":818},24,[693,820,780],{},[693,822,824],{"class":695,"line":823},25,[693,825,826],{},"    // Handle different event types\n",[693,828,830],{"class":695,"line":829},26,[693,831,832],{},"    switch (event.type) {\n",[693,834,836],{"class":695,"line":835},27,[693,837,838],{},"      case 'session.completed':\n",[693,840,842],{"class":695,"line":841},28,[693,843,844],{},"        handleSessionCompleted(event.data);\n",[693,846,848],{"class":695,"line":847},29,[693,849,850],{},"        break;\n",[693,852,854],{"class":695,"line":853},30,[693,855,856],{},"      case 'analysis.completed':\n",[693,858,860],{"class":695,"line":859},31,[693,861,862],{},"        handleAnalysisCompleted(event.data);\n",[693,864,866],{"class":695,"line":865},32,[693,867,850],{},[693,869,871],{"class":695,"line":870},33,[693,872,873],{},"      // ... other event types\n",[693,875,877],{"class":695,"line":876},34,[693,878,879],{},"    }\n",[693,881,883],{"class":695,"line":882},35,[693,884,780],{},[693,886,888],{"class":695,"line":887},36,[693,889,890],{},"    res.status(200).send('OK');\n",[693,892,894],{"class":695,"line":893},37,[693,895,896],{},"  } catch (error) {\n",[693,898,900],{"class":695,"line":899},38,[693,901,902],{},"    console.error('Webhook processing error:', error);\n",[693,904,906],{"class":695,"line":905},39,[693,907,908],{},"    res.status(500).send('Internal server error');\n",[693,910,912],{"class":695,"line":911},40,[693,913,798],{},[693,915,917],{"class":695,"line":916},41,[693,918,919],{},"});\n",[693,921,923],{"class":695,"line":922},42,[693,924,719],{"emptyLinePlaceholder":718},[693,926,928],{"class":695,"line":927},43,[693,929,930],{},"app.listen(3000, () => {\n",[693,932,934],{"class":695,"line":933},44,[693,935,936],{},"  console.log('Webhook server running on port 3000');\n",[693,938,940],{"class":695,"line":939},45,[693,941,919],{},[525,943,945],{"id":944},"_2-register-webhook","2. Register Webhook",[517,947,948],{},"Register your webhook endpoint through the API or dashboard:",[684,950,954],{"className":951,"code":952,"language":953,"meta":689,"style":689},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -X POST https://api.mindpeeker.com/v1/webhooks \\\n  -H \"Authorization: Bearer your_api_key\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://your-app.com/webhook\",\n    \"events\": [\n      \"session.completed\",\n      \"analysis.completed\",\n      \"dowsing.query_completed\"\n    ],\n    \"secret\": \"your_webhook_secret_here\",\n    \"active\": true\n  }'\n","bash",[536,955,956,976,993,1006,1017,1022,1027,1032,1037,1042,1047,1052,1057],{"__ignoreMap":689},[693,957,958,962,966,969,972],{"class":695,"line":82},[693,959,961],{"class":960},"sBMFI","curl",[693,963,965],{"class":964},"sfazB"," -X",[693,967,968],{"class":964}," POST",[693,970,971],{"class":964}," https://api.mindpeeker.com/v1/webhooks",[693,973,975],{"class":974},"sTEyZ"," \\\n",[693,977,978,981,985,988,991],{"class":695,"line":114},[693,979,980],{"class":964},"  -H",[693,982,984],{"class":983},"sMK4o"," \"",[693,986,987],{"class":964},"Authorization: Bearer your_api_key",[693,989,990],{"class":983},"\"",[693,992,975],{"class":974},[693,994,995,997,999,1002,1004],{"class":695,"line":146},[693,996,980],{"class":964},[693,998,984],{"class":983},[693,1000,1001],{"class":964},"Content-Type: application/json",[693,1003,990],{"class":983},[693,1005,975],{"class":974},[693,1007,1008,1011,1014],{"class":695,"line":178},[693,1009,1010],{"class":964},"  -d",[693,1012,1013],{"class":983}," '",[693,1015,1016],{"class":964},"{\n",[693,1018,1019],{"class":695,"line":268},[693,1020,1021],{"class":964},"    \"url\": \"https://your-app.com/webhook\",\n",[693,1023,1024],{"class":695,"line":273},[693,1025,1026],{"class":964},"    \"events\": [\n",[693,1028,1029],{"class":695,"line":279},[693,1030,1031],{"class":964},"      \"session.completed\",\n",[693,1033,1034],{"class":695,"line":285},[693,1035,1036],{"class":964},"      \"analysis.completed\",\n",[693,1038,1039],{"class":695,"line":291},[693,1040,1041],{"class":964},"      \"dowsing.query_completed\"\n",[693,1043,1044],{"class":695,"line":222},[693,1045,1046],{"class":964},"    ],\n",[693,1048,1049],{"class":695,"line":227},[693,1050,1051],{"class":964},"    \"secret\": \"your_webhook_secret_here\",\n",[693,1053,1054],{"class":695,"line":232},[693,1055,1056],{"class":964},"    \"active\": true\n",[693,1058,1059,1062],{"class":695,"line":238},[693,1060,1061],{"class":964},"  }",[693,1063,1064],{"class":983},"'\n",[525,1066,1068],{"id":1067},"_3-test-webhook","3. Test Webhook",[517,1070,1071],{},"Test your webhook configuration:",[684,1073,1075],{"className":951,"code":1074,"language":953,"meta":689,"style":689},"curl -X POST https://api.mindpeeker.com/v1/webhooks/{webhook_id}/test \\\n  -H \"Authorization: Bearer your_api_key\"\n",[536,1076,1077,1090],{"__ignoreMap":689},[693,1078,1079,1081,1083,1085,1088],{"class":695,"line":82},[693,1080,961],{"class":960},[693,1082,965],{"class":964},[693,1084,968],{"class":964},[693,1086,1087],{"class":964}," https://api.mindpeeker.com/v1/webhooks/{webhook_id}/test",[693,1089,975],{"class":974},[693,1091,1092,1094,1096,1098],{"class":695,"line":114},[693,1093,980],{"class":964},[693,1095,984],{"class":983},[693,1097,987],{"class":964},[693,1099,1100],{"class":983},"\"\n",[512,1102,1104],{"id":1103},"webhook-event-format","Webhook Event Format",[517,1106,1107],{},"All webhook events follow this structure:",[684,1109,1113],{"className":1110,"code":1111,"language":1112,"meta":689,"style":689},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"id\": \"evt_1234567890abcdef\",\n  \"type\": \"session.completed\",\n  \"created_at\": \"2025-01-15T10:30:00Z\",\n  \"data\": {\n    \"session_id\": \"sess_123456789\",\n    \"status\": \"completed\",\n    \"confidence_score\": 0.87,\n    \"completed_at\": \"2025-01-15T10:30:00Z\"\n  },\n  \"livemode\": true,\n  \"pending_webhooks\": 0\n}\n","json",[536,1114,1115,1119,1143,1162,1182,1196,1217,1237,1254,1271,1276,1290,1304],{"__ignoreMap":689},[693,1116,1117],{"class":695,"line":82},[693,1118,1016],{"class":983},[693,1120,1121,1124,1128,1130,1133,1135,1138,1140],{"class":695,"line":114},[693,1122,1123],{"class":983},"  \"",[693,1125,1127],{"class":1126},"spNyl","id",[693,1129,990],{"class":983},[693,1131,1132],{"class":983},":",[693,1134,984],{"class":983},[693,1136,1137],{"class":964},"evt_1234567890abcdef",[693,1139,990],{"class":983},[693,1141,1142],{"class":983},",\n",[693,1144,1145,1147,1150,1152,1154,1156,1158,1160],{"class":695,"line":146},[693,1146,1123],{"class":983},[693,1148,1149],{"class":1126},"type",[693,1151,990],{"class":983},[693,1153,1132],{"class":983},[693,1155,984],{"class":983},[693,1157,550],{"class":964},[693,1159,990],{"class":983},[693,1161,1142],{"class":983},[693,1163,1164,1166,1169,1171,1173,1175,1178,1180],{"class":695,"line":178},[693,1165,1123],{"class":983},[693,1167,1168],{"class":1126},"created_at",[693,1170,990],{"class":983},[693,1172,1132],{"class":983},[693,1174,984],{"class":983},[693,1176,1177],{"class":964},"2025-01-15T10:30:00Z",[693,1179,990],{"class":983},[693,1181,1142],{"class":983},[693,1183,1184,1186,1189,1191,1193],{"class":695,"line":268},[693,1185,1123],{"class":983},[693,1187,1188],{"class":1126},"data",[693,1190,990],{"class":983},[693,1192,1132],{"class":983},[693,1194,1195],{"class":983}," {\n",[693,1197,1198,1201,1204,1206,1208,1210,1213,1215],{"class":695,"line":273},[693,1199,1200],{"class":983},"    \"",[693,1202,1203],{"class":960},"session_id",[693,1205,990],{"class":983},[693,1207,1132],{"class":983},[693,1209,984],{"class":983},[693,1211,1212],{"class":964},"sess_123456789",[693,1214,990],{"class":983},[693,1216,1142],{"class":983},[693,1218,1219,1221,1224,1226,1228,1230,1233,1235],{"class":695,"line":279},[693,1220,1200],{"class":983},[693,1222,1223],{"class":960},"status",[693,1225,990],{"class":983},[693,1227,1132],{"class":983},[693,1229,984],{"class":983},[693,1231,1232],{"class":964},"completed",[693,1234,990],{"class":983},[693,1236,1142],{"class":983},[693,1238,1239,1241,1244,1246,1248,1252],{"class":695,"line":285},[693,1240,1200],{"class":983},[693,1242,1243],{"class":960},"confidence_score",[693,1245,990],{"class":983},[693,1247,1132],{"class":983},[693,1249,1251],{"class":1250},"sbssI"," 0.87",[693,1253,1142],{"class":983},[693,1255,1256,1258,1261,1263,1265,1267,1269],{"class":695,"line":291},[693,1257,1200],{"class":983},[693,1259,1260],{"class":960},"completed_at",[693,1262,990],{"class":983},[693,1264,1132],{"class":983},[693,1266,984],{"class":983},[693,1268,1177],{"class":964},[693,1270,1100],{"class":983},[693,1272,1273],{"class":695,"line":222},[693,1274,1275],{"class":983},"  },\n",[693,1277,1278,1280,1283,1285,1287],{"class":695,"line":227},[693,1279,1123],{"class":983},[693,1281,1282],{"class":1126},"livemode",[693,1284,990],{"class":983},[693,1286,1132],{"class":983},[693,1288,1289],{"class":983}," true,\n",[693,1291,1292,1294,1297,1299,1301],{"class":695,"line":232},[693,1293,1123],{"class":983},[693,1295,1296],{"class":1126},"pending_webhooks",[693,1298,990],{"class":983},[693,1300,1132],{"class":983},[693,1302,1303],{"class":1250}," 0\n",[693,1305,1306],{"class":695,"line":238},[693,1307,1308],{"class":983},"}\n",[525,1310,1312],{"id":1311},"event-specific-data","Event-Specific Data",[1314,1315,550],"h4",{"id":1316},"sessioncompleted",[684,1318,1320],{"className":1110,"code":1319,"language":1112,"meta":689,"style":689},"{\n  \"type\": \"session.completed\",\n  \"data\": {\n    \"session_id\": \"sess_123456789\",\n    \"type\": \"remote_viewing\",\n    \"target\": \"Missing person investigation\",\n    \"status\": \"completed\",\n    \"confidence_score\": 0.87,\n    \"duration_minutes\": 28,\n    \"results\": {\n      \"coordinates\": {\n        \"latitude\": 40.7128,\n        \"longitude\": -74.0060\n      },\n      \"descriptors\": [\"urban environment\", \"water body nearby\"],\n      \"sketches\": [\"https://cdn.mindpeeker.com/sketches/sess_123456789_1.png\"]\n    },\n    \"completed_at\": \"2025-01-15T10:30:00Z\"\n  }\n}\n",[536,1321,1322,1326,1344,1356,1374,1393,1413,1431,1445,1461,1474,1488,1506,1520,1525,1559,1582,1587,1603,1607],{"__ignoreMap":689},[693,1323,1324],{"class":695,"line":82},[693,1325,1016],{"class":983},[693,1327,1328,1330,1332,1334,1336,1338,1340,1342],{"class":695,"line":114},[693,1329,1123],{"class":983},[693,1331,1149],{"class":1126},[693,1333,990],{"class":983},[693,1335,1132],{"class":983},[693,1337,984],{"class":983},[693,1339,550],{"class":964},[693,1341,990],{"class":983},[693,1343,1142],{"class":983},[693,1345,1346,1348,1350,1352,1354],{"class":695,"line":146},[693,1347,1123],{"class":983},[693,1349,1188],{"class":1126},[693,1351,990],{"class":983},[693,1353,1132],{"class":983},[693,1355,1195],{"class":983},[693,1357,1358,1360,1362,1364,1366,1368,1370,1372],{"class":695,"line":178},[693,1359,1200],{"class":983},[693,1361,1203],{"class":960},[693,1363,990],{"class":983},[693,1365,1132],{"class":983},[693,1367,984],{"class":983},[693,1369,1212],{"class":964},[693,1371,990],{"class":983},[693,1373,1142],{"class":983},[693,1375,1376,1378,1380,1382,1384,1386,1389,1391],{"class":695,"line":268},[693,1377,1200],{"class":983},[693,1379,1149],{"class":960},[693,1381,990],{"class":983},[693,1383,1132],{"class":983},[693,1385,984],{"class":983},[693,1387,1388],{"class":964},"remote_viewing",[693,1390,990],{"class":983},[693,1392,1142],{"class":983},[693,1394,1395,1397,1400,1402,1404,1406,1409,1411],{"class":695,"line":273},[693,1396,1200],{"class":983},[693,1398,1399],{"class":960},"target",[693,1401,990],{"class":983},[693,1403,1132],{"class":983},[693,1405,984],{"class":983},[693,1407,1408],{"class":964},"Missing person investigation",[693,1410,990],{"class":983},[693,1412,1142],{"class":983},[693,1414,1415,1417,1419,1421,1423,1425,1427,1429],{"class":695,"line":279},[693,1416,1200],{"class":983},[693,1418,1223],{"class":960},[693,1420,990],{"class":983},[693,1422,1132],{"class":983},[693,1424,984],{"class":983},[693,1426,1232],{"class":964},[693,1428,990],{"class":983},[693,1430,1142],{"class":983},[693,1432,1433,1435,1437,1439,1441,1443],{"class":695,"line":285},[693,1434,1200],{"class":983},[693,1436,1243],{"class":960},[693,1438,990],{"class":983},[693,1440,1132],{"class":983},[693,1442,1251],{"class":1250},[693,1444,1142],{"class":983},[693,1446,1447,1449,1452,1454,1456,1459],{"class":695,"line":291},[693,1448,1200],{"class":983},[693,1450,1451],{"class":960},"duration_minutes",[693,1453,990],{"class":983},[693,1455,1132],{"class":983},[693,1457,1458],{"class":1250}," 28",[693,1460,1142],{"class":983},[693,1462,1463,1465,1468,1470,1472],{"class":695,"line":222},[693,1464,1200],{"class":983},[693,1466,1467],{"class":960},"results",[693,1469,990],{"class":983},[693,1471,1132],{"class":983},[693,1473,1195],{"class":983},[693,1475,1476,1479,1482,1484,1486],{"class":695,"line":227},[693,1477,1478],{"class":983},"      \"",[693,1480,1481],{"class":1250},"coordinates",[693,1483,990],{"class":983},[693,1485,1132],{"class":983},[693,1487,1195],{"class":983},[693,1489,1490,1493,1497,1499,1501,1504],{"class":695,"line":232},[693,1491,1492],{"class":983},"        \"",[693,1494,1496],{"class":1495},"swJcz","latitude",[693,1498,990],{"class":983},[693,1500,1132],{"class":983},[693,1502,1503],{"class":1250}," 40.7128",[693,1505,1142],{"class":983},[693,1507,1508,1510,1513,1515,1517],{"class":695,"line":238},[693,1509,1492],{"class":983},[693,1511,1512],{"class":1495},"longitude",[693,1514,990],{"class":983},[693,1516,1132],{"class":983},[693,1518,1519],{"class":1250}," -74.0060\n",[693,1521,1522],{"class":695,"line":243},[693,1523,1524],{"class":983},"      },\n",[693,1526,1527,1529,1532,1534,1536,1539,1541,1544,1546,1549,1551,1554,1556],{"class":695,"line":248},[693,1528,1478],{"class":983},[693,1530,1531],{"class":1250},"descriptors",[693,1533,990],{"class":983},[693,1535,1132],{"class":983},[693,1537,1538],{"class":983}," [",[693,1540,990],{"class":983},[693,1542,1543],{"class":964},"urban environment",[693,1545,990],{"class":983},[693,1547,1548],{"class":983},",",[693,1550,984],{"class":983},[693,1552,1553],{"class":964},"water body nearby",[693,1555,990],{"class":983},[693,1557,1558],{"class":983},"],\n",[693,1560,1561,1563,1566,1568,1570,1572,1574,1577,1579],{"class":695,"line":771},[693,1562,1478],{"class":983},[693,1564,1565],{"class":1250},"sketches",[693,1567,990],{"class":983},[693,1569,1132],{"class":983},[693,1571,1538],{"class":983},[693,1573,990],{"class":983},[693,1575,1576],{"class":964},"https://cdn.mindpeeker.com/sketches/sess_123456789_1.png",[693,1578,990],{"class":983},[693,1580,1581],{"class":983},"]\n",[693,1583,1584],{"class":695,"line":777},[693,1585,1586],{"class":983},"    },\n",[693,1588,1589,1591,1593,1595,1597,1599,1601],{"class":695,"line":783},[693,1590,1200],{"class":983},[693,1592,1260],{"class":960},[693,1594,990],{"class":983},[693,1596,1132],{"class":983},[693,1598,984],{"class":983},[693,1600,1177],{"class":964},[693,1602,1100],{"class":983},[693,1604,1605],{"class":695,"line":789},[693,1606,798],{"class":983},[693,1608,1609],{"class":695,"line":795},[693,1610,1308],{"class":983},[1314,1612,586],{"id":1613},"analysiscompleted",[684,1615,1617],{"className":1110,"code":1616,"language":1112,"meta":689,"style":689},"{\n  \"type\": \"analysis.completed\",\n  \"data\": {\n    \"analysis_id\": \"anal_123456789\",\n    \"target_type\": \"location\",\n    \"status\": \"completed\",\n    \"confidence_score\": 0.91,\n    \"results\": {\n      \"summary\": \"Analysis reveals structural anomalies...\",\n      \"key_findings\": [\n        \"Structural anomalies detected\",\n        \"Temporal inconsistencies present\"\n      ],\n      \"risk_assessment\": {\n        \"level\": \"medium\",\n        \"factors\": [\"temporal_instability\"]\n      }\n    },\n    \"processing_time\": \"45 minutes\",\n    \"completed_at\": \"2025-01-15T11:15:00Z\"\n  }\n}\n",[536,1618,1619,1623,1641,1653,1673,1693,1711,1726,1738,1758,1772,1783,1792,1797,1810,1830,1852,1857,1861,1881,1898,1902],{"__ignoreMap":689},[693,1620,1621],{"class":695,"line":82},[693,1622,1016],{"class":983},[693,1624,1625,1627,1629,1631,1633,1635,1637,1639],{"class":695,"line":114},[693,1626,1123],{"class":983},[693,1628,1149],{"class":1126},[693,1630,990],{"class":983},[693,1632,1132],{"class":983},[693,1634,984],{"class":983},[693,1636,586],{"class":964},[693,1638,990],{"class":983},[693,1640,1142],{"class":983},[693,1642,1643,1645,1647,1649,1651],{"class":695,"line":146},[693,1644,1123],{"class":983},[693,1646,1188],{"class":1126},[693,1648,990],{"class":983},[693,1650,1132],{"class":983},[693,1652,1195],{"class":983},[693,1654,1655,1657,1660,1662,1664,1666,1669,1671],{"class":695,"line":178},[693,1656,1200],{"class":983},[693,1658,1659],{"class":960},"analysis_id",[693,1661,990],{"class":983},[693,1663,1132],{"class":983},[693,1665,984],{"class":983},[693,1667,1668],{"class":964},"anal_123456789",[693,1670,990],{"class":983},[693,1672,1142],{"class":983},[693,1674,1675,1677,1680,1682,1684,1686,1689,1691],{"class":695,"line":268},[693,1676,1200],{"class":983},[693,1678,1679],{"class":960},"target_type",[693,1681,990],{"class":983},[693,1683,1132],{"class":983},[693,1685,984],{"class":983},[693,1687,1688],{"class":964},"location",[693,1690,990],{"class":983},[693,1692,1142],{"class":983},[693,1694,1695,1697,1699,1701,1703,1705,1707,1709],{"class":695,"line":273},[693,1696,1200],{"class":983},[693,1698,1223],{"class":960},[693,1700,990],{"class":983},[693,1702,1132],{"class":983},[693,1704,984],{"class":983},[693,1706,1232],{"class":964},[693,1708,990],{"class":983},[693,1710,1142],{"class":983},[693,1712,1713,1715,1717,1719,1721,1724],{"class":695,"line":279},[693,1714,1200],{"class":983},[693,1716,1243],{"class":960},[693,1718,990],{"class":983},[693,1720,1132],{"class":983},[693,1722,1723],{"class":1250}," 0.91",[693,1725,1142],{"class":983},[693,1727,1728,1730,1732,1734,1736],{"class":695,"line":285},[693,1729,1200],{"class":983},[693,1731,1467],{"class":960},[693,1733,990],{"class":983},[693,1735,1132],{"class":983},[693,1737,1195],{"class":983},[693,1739,1740,1742,1745,1747,1749,1751,1754,1756],{"class":695,"line":291},[693,1741,1478],{"class":983},[693,1743,1744],{"class":1250},"summary",[693,1746,990],{"class":983},[693,1748,1132],{"class":983},[693,1750,984],{"class":983},[693,1752,1753],{"class":964},"Analysis reveals structural anomalies...",[693,1755,990],{"class":983},[693,1757,1142],{"class":983},[693,1759,1760,1762,1765,1767,1769],{"class":695,"line":222},[693,1761,1478],{"class":983},[693,1763,1764],{"class":1250},"key_findings",[693,1766,990],{"class":983},[693,1768,1132],{"class":983},[693,1770,1771],{"class":983}," [\n",[693,1773,1774,1776,1779,1781],{"class":695,"line":227},[693,1775,1492],{"class":983},[693,1777,1778],{"class":964},"Structural anomalies detected",[693,1780,990],{"class":983},[693,1782,1142],{"class":983},[693,1784,1785,1787,1790],{"class":695,"line":232},[693,1786,1492],{"class":983},[693,1788,1789],{"class":964},"Temporal inconsistencies present",[693,1791,1100],{"class":983},[693,1793,1794],{"class":695,"line":238},[693,1795,1796],{"class":983},"      ],\n",[693,1798,1799,1801,1804,1806,1808],{"class":695,"line":243},[693,1800,1478],{"class":983},[693,1802,1803],{"class":1250},"risk_assessment",[693,1805,990],{"class":983},[693,1807,1132],{"class":983},[693,1809,1195],{"class":983},[693,1811,1812,1814,1817,1819,1821,1823,1826,1828],{"class":695,"line":248},[693,1813,1492],{"class":983},[693,1815,1816],{"class":1495},"level",[693,1818,990],{"class":983},[693,1820,1132],{"class":983},[693,1822,984],{"class":983},[693,1824,1825],{"class":964},"medium",[693,1827,990],{"class":983},[693,1829,1142],{"class":983},[693,1831,1832,1834,1837,1839,1841,1843,1845,1848,1850],{"class":695,"line":771},[693,1833,1492],{"class":983},[693,1835,1836],{"class":1495},"factors",[693,1838,990],{"class":983},[693,1840,1132],{"class":983},[693,1842,1538],{"class":983},[693,1844,990],{"class":983},[693,1846,1847],{"class":964},"temporal_instability",[693,1849,990],{"class":983},[693,1851,1581],{"class":983},[693,1853,1854],{"class":695,"line":777},[693,1855,1856],{"class":983},"      }\n",[693,1858,1859],{"class":695,"line":783},[693,1860,1586],{"class":983},[693,1862,1863,1865,1868,1870,1872,1874,1877,1879],{"class":695,"line":789},[693,1864,1200],{"class":983},[693,1866,1867],{"class":960},"processing_time",[693,1869,990],{"class":983},[693,1871,1132],{"class":983},[693,1873,984],{"class":983},[693,1875,1876],{"class":964},"45 minutes",[693,1878,990],{"class":983},[693,1880,1142],{"class":983},[693,1882,1883,1885,1887,1889,1891,1893,1896],{"class":695,"line":795},[693,1884,1200],{"class":983},[693,1886,1260],{"class":960},[693,1888,990],{"class":983},[693,1890,1132],{"class":983},[693,1892,984],{"class":983},[693,1894,1895],{"class":964},"2025-01-15T11:15:00Z",[693,1897,1100],{"class":983},[693,1899,1900],{"class":695,"line":801},[693,1901,798],{"class":983},[693,1903,1904],{"class":695,"line":806},[693,1905,1308],{"class":983},[1314,1907,610],{"id":1908},"dowsingquery_completed",[684,1910,1912],{"className":1110,"code":1911,"language":1112,"meta":689,"style":689},"{\n  \"type\": \"dowsing.query_completed\",\n  \"data\": {\n    \"query_id\": \"dowse_123456789\",\n    \"query_type\": \"location\",\n    \"question\": \"Find optimal location for water well\",\n    \"answer\": \"positive\",\n    \"confidence\": 0.89,\n    \"coordinates\": {\n      \"latitude\": 40.7132,\n      \"longitude\": -74.0058,\n      \"accuracy_meters\": 15\n    },\n    \"chart_data\": {\n      \"chart_type\": \"radar\",\n      \"readings\": [0.8, 0.6, 0.9, 0.7],\n      \"interpretation\": \"Strong positive response\"\n    },\n    \"completed_at\": \"2025-01-15T09:45:00Z\"\n  }\n}\n",[536,1913,1914,1918,1936,1948,1968,1987,2007,2027,2043,2055,2070,2085,2099,2103,2116,2136,2169,2187,2191,2208,2212],{"__ignoreMap":689},[693,1915,1916],{"class":695,"line":82},[693,1917,1016],{"class":983},[693,1919,1920,1922,1924,1926,1928,1930,1932,1934],{"class":695,"line":114},[693,1921,1123],{"class":983},[693,1923,1149],{"class":1126},[693,1925,990],{"class":983},[693,1927,1132],{"class":983},[693,1929,984],{"class":983},[693,1931,610],{"class":964},[693,1933,990],{"class":983},[693,1935,1142],{"class":983},[693,1937,1938,1940,1942,1944,1946],{"class":695,"line":146},[693,1939,1123],{"class":983},[693,1941,1188],{"class":1126},[693,1943,990],{"class":983},[693,1945,1132],{"class":983},[693,1947,1195],{"class":983},[693,1949,1950,1952,1955,1957,1959,1961,1964,1966],{"class":695,"line":178},[693,1951,1200],{"class":983},[693,1953,1954],{"class":960},"query_id",[693,1956,990],{"class":983},[693,1958,1132],{"class":983},[693,1960,984],{"class":983},[693,1962,1963],{"class":964},"dowse_123456789",[693,1965,990],{"class":983},[693,1967,1142],{"class":983},[693,1969,1970,1972,1975,1977,1979,1981,1983,1985],{"class":695,"line":268},[693,1971,1200],{"class":983},[693,1973,1974],{"class":960},"query_type",[693,1976,990],{"class":983},[693,1978,1132],{"class":983},[693,1980,984],{"class":983},[693,1982,1688],{"class":964},[693,1984,990],{"class":983},[693,1986,1142],{"class":983},[693,1988,1989,1991,1994,1996,1998,2000,2003,2005],{"class":695,"line":273},[693,1990,1200],{"class":983},[693,1992,1993],{"class":960},"question",[693,1995,990],{"class":983},[693,1997,1132],{"class":983},[693,1999,984],{"class":983},[693,2001,2002],{"class":964},"Find optimal location for water well",[693,2004,990],{"class":983},[693,2006,1142],{"class":983},[693,2008,2009,2011,2014,2016,2018,2020,2023,2025],{"class":695,"line":279},[693,2010,1200],{"class":983},[693,2012,2013],{"class":960},"answer",[693,2015,990],{"class":983},[693,2017,1132],{"class":983},[693,2019,984],{"class":983},[693,2021,2022],{"class":964},"positive",[693,2024,990],{"class":983},[693,2026,1142],{"class":983},[693,2028,2029,2031,2034,2036,2038,2041],{"class":695,"line":285},[693,2030,1200],{"class":983},[693,2032,2033],{"class":960},"confidence",[693,2035,990],{"class":983},[693,2037,1132],{"class":983},[693,2039,2040],{"class":1250}," 0.89",[693,2042,1142],{"class":983},[693,2044,2045,2047,2049,2051,2053],{"class":695,"line":291},[693,2046,1200],{"class":983},[693,2048,1481],{"class":960},[693,2050,990],{"class":983},[693,2052,1132],{"class":983},[693,2054,1195],{"class":983},[693,2056,2057,2059,2061,2063,2065,2068],{"class":695,"line":222},[693,2058,1478],{"class":983},[693,2060,1496],{"class":1250},[693,2062,990],{"class":983},[693,2064,1132],{"class":983},[693,2066,2067],{"class":1250}," 40.7132",[693,2069,1142],{"class":983},[693,2071,2072,2074,2076,2078,2080,2083],{"class":695,"line":227},[693,2073,1478],{"class":983},[693,2075,1512],{"class":1250},[693,2077,990],{"class":983},[693,2079,1132],{"class":983},[693,2081,2082],{"class":1250}," -74.0058",[693,2084,1142],{"class":983},[693,2086,2087,2089,2092,2094,2096],{"class":695,"line":232},[693,2088,1478],{"class":983},[693,2090,2091],{"class":1250},"accuracy_meters",[693,2093,990],{"class":983},[693,2095,1132],{"class":983},[693,2097,2098],{"class":1250}," 15\n",[693,2100,2101],{"class":695,"line":238},[693,2102,1586],{"class":983},[693,2104,2105,2107,2110,2112,2114],{"class":695,"line":243},[693,2106,1200],{"class":983},[693,2108,2109],{"class":960},"chart_data",[693,2111,990],{"class":983},[693,2113,1132],{"class":983},[693,2115,1195],{"class":983},[693,2117,2118,2120,2123,2125,2127,2129,2132,2134],{"class":695,"line":248},[693,2119,1478],{"class":983},[693,2121,2122],{"class":1250},"chart_type",[693,2124,990],{"class":983},[693,2126,1132],{"class":983},[693,2128,984],{"class":983},[693,2130,2131],{"class":964},"radar",[693,2133,990],{"class":983},[693,2135,1142],{"class":983},[693,2137,2138,2140,2143,2145,2147,2149,2152,2154,2157,2159,2162,2164,2167],{"class":695,"line":771},[693,2139,1478],{"class":983},[693,2141,2142],{"class":1250},"readings",[693,2144,990],{"class":983},[693,2146,1132],{"class":983},[693,2148,1538],{"class":983},[693,2150,2151],{"class":1250},"0.8",[693,2153,1548],{"class":983},[693,2155,2156],{"class":1250}," 0.6",[693,2158,1548],{"class":983},[693,2160,2161],{"class":1250}," 0.9",[693,2163,1548],{"class":983},[693,2165,2166],{"class":1250}," 0.7",[693,2168,1558],{"class":983},[693,2170,2171,2173,2176,2178,2180,2182,2185],{"class":695,"line":777},[693,2172,1478],{"class":983},[693,2174,2175],{"class":1250},"interpretation",[693,2177,990],{"class":983},[693,2179,1132],{"class":983},[693,2181,984],{"class":983},[693,2183,2184],{"class":964},"Strong positive response",[693,2186,1100],{"class":983},[693,2188,2189],{"class":695,"line":783},[693,2190,1586],{"class":983},[693,2192,2193,2195,2197,2199,2201,2203,2206],{"class":695,"line":789},[693,2194,1200],{"class":983},[693,2196,1260],{"class":960},[693,2198,990],{"class":983},[693,2200,1132],{"class":983},[693,2202,984],{"class":983},[693,2204,2205],{"class":964},"2025-01-15T09:45:00Z",[693,2207,1100],{"class":983},[693,2209,2210],{"class":695,"line":795},[693,2211,798],{"class":983},[693,2213,2214],{"class":695,"line":801},[693,2215,1308],{"class":983},[512,2217,2219],{"id":2218},"security","Security",[525,2221,2223],{"id":2222},"signature-verification","Signature Verification",[517,2225,2226],{},"All webhook requests are signed with HMAC-SHA256 using your webhook secret:",[684,2228,2232],{"className":2229,"code":2230,"language":2231,"meta":689,"style":689},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import hmac\nimport hashlib\n\ndef verify_webhook_signature(payload, signature, secret):\n    expected_signature = hmac.new(\n        secret.encode('utf-8'),\n        payload,\n        hashlib.sha256\n    ).hexdigest()\n    \n    return hmac.compare_digest(\n        f'sha256={expected_signature}',\n        signature\n    )\n\nsignature = request.headers.get('X-MindPeeker-Signature')\npayload = request.body\n\nif verify_webhook_signature(payload, signature, 'your_webhook_secret'):\n    # Process webhook\n    pass\nelse:\n    # Reject webhook\n    pass\n","python",[536,2233,2234,2239,2244,2248,2253,2258,2263,2268,2273,2278,2282,2287,2292,2297,2302,2306,2311,2316,2320,2325,2330,2335,2340,2345],{"__ignoreMap":689},[693,2235,2236],{"class":695,"line":82},[693,2237,2238],{},"import hmac\n",[693,2240,2241],{"class":695,"line":114},[693,2242,2243],{},"import hashlib\n",[693,2245,2246],{"class":695,"line":146},[693,2247,719],{"emptyLinePlaceholder":718},[693,2249,2250],{"class":695,"line":178},[693,2251,2252],{},"def verify_webhook_signature(payload, signature, secret):\n",[693,2254,2255],{"class":695,"line":268},[693,2256,2257],{},"    expected_signature = hmac.new(\n",[693,2259,2260],{"class":695,"line":273},[693,2261,2262],{},"        secret.encode('utf-8'),\n",[693,2264,2265],{"class":695,"line":279},[693,2266,2267],{},"        payload,\n",[693,2269,2270],{"class":695,"line":285},[693,2271,2272],{},"        hashlib.sha256\n",[693,2274,2275],{"class":695,"line":291},[693,2276,2277],{},"    ).hexdigest()\n",[693,2279,2280],{"class":695,"line":222},[693,2281,780],{},[693,2283,2284],{"class":695,"line":227},[693,2285,2286],{},"    return hmac.compare_digest(\n",[693,2288,2289],{"class":695,"line":232},[693,2290,2291],{},"        f'sha256={expected_signature}',\n",[693,2293,2294],{"class":695,"line":238},[693,2295,2296],{},"        signature\n",[693,2298,2299],{"class":695,"line":243},[693,2300,2301],{},"    )\n",[693,2303,2304],{"class":695,"line":248},[693,2305,719],{"emptyLinePlaceholder":718},[693,2307,2308],{"class":695,"line":771},[693,2309,2310],{},"signature = request.headers.get('X-MindPeeker-Signature')\n",[693,2312,2313],{"class":695,"line":777},[693,2314,2315],{},"payload = request.body\n",[693,2317,2318],{"class":695,"line":783},[693,2319,719],{"emptyLinePlaceholder":718},[693,2321,2322],{"class":695,"line":789},[693,2323,2324],{},"if verify_webhook_signature(payload, signature, 'your_webhook_secret'):\n",[693,2326,2327],{"class":695,"line":795},[693,2328,2329],{},"    # Process webhook\n",[693,2331,2332],{"class":695,"line":801},[693,2333,2334],{},"    pass\n",[693,2336,2337],{"class":695,"line":806},[693,2338,2339],{},"else:\n",[693,2341,2342],{"class":695,"line":812},[693,2343,2344],{},"    # Reject webhook\n",[693,2346,2347],{"class":695,"line":818},[693,2348,2334],{},[525,2350,2352],{"id":2351},"ip-whitelisting","IP Whitelisting",[517,2354,2355],{},"For additional security, you can whitelist MindPeeker's webhook IP addresses:",[684,2357,2362],{"className":2358,"code":2360,"language":2361},[2359],"language-text","52.52.52.52\n52.53.53.53\n","text",[536,2363,2360],{"__ignoreMap":689},[525,2365,2367],{"id":2366},"tls-requirements","TLS Requirements",[530,2369,2370,2373,2376],{},[533,2371,2372],{},"Webhook endpoints must use HTTPS",[533,2374,2375],{},"TLS 1.2 or higher required",[533,2377,2378],{},"Valid SSL certificates required",[512,2380,399],{"id":2381},"best-practices",[525,2383,2385],{"id":2384},"_1-fast-response-times","1. Fast Response Times",[517,2387,2388],{},"Respond to webhook requests quickly (within 5 seconds):",[684,2390,2392],{"className":686,"code":2391,"language":688,"meta":689,"style":689},"// Acknowledge immediately, process asynchronously\napp.post('/webhook', (req, res) => {\n  // Quick validation\n  if (!verifySignature(req.body, req.headers['x-mindpeeker-signature'])) {\n    return res.status(401).send('Invalid signature');\n  }\n  \n  // Acknowledge immediately\n  res.status(200).send('OK');\n  \n  // Process asynchronously\n  setImmediate(() => {\n    processWebhook(req.body);\n  });\n});\n",[536,2393,2394,2399,2403,2408,2413,2417,2421,2425,2430,2435,2439,2444,2449,2454,2459],{"__ignoreMap":689},[693,2395,2396],{"class":695,"line":82},[693,2397,2398],{},"// Acknowledge immediately, process asynchronously\n",[693,2400,2401],{"class":695,"line":114},[693,2402,733],{},[693,2404,2405],{"class":695,"line":146},[693,2406,2407],{},"  // Quick validation\n",[693,2409,2410],{"class":695,"line":178},[693,2411,2412],{},"  if (!verifySignature(req.body, req.headers['x-mindpeeker-signature'])) {\n",[693,2414,2415],{"class":695,"line":268},[693,2416,792],{},[693,2418,2419],{"class":695,"line":273},[693,2420,798],{},[693,2422,2423],{"class":695,"line":279},[693,2424,748],{},[693,2426,2427],{"class":695,"line":285},[693,2428,2429],{},"  // Acknowledge immediately\n",[693,2431,2432],{"class":695,"line":291},[693,2433,2434],{},"  res.status(200).send('OK');\n",[693,2436,2437],{"class":695,"line":222},[693,2438,748],{},[693,2440,2441],{"class":695,"line":227},[693,2442,2443],{},"  // Process asynchronously\n",[693,2445,2446],{"class":695,"line":232},[693,2447,2448],{},"  setImmediate(() => {\n",[693,2450,2451],{"class":695,"line":238},[693,2452,2453],{},"    processWebhook(req.body);\n",[693,2455,2456],{"class":695,"line":243},[693,2457,2458],{},"  });\n",[693,2460,2461],{"class":695,"line":248},[693,2462,919],{},[525,2464,2466],{"id":2465},"_2-idempotency","2. Idempotency",[517,2468,2469],{},"Handle duplicate webhook deliveries:",[684,2471,2473],{"className":686,"code":2472,"language":688,"meta":689,"style":689},"const processedEvents = new Set();\n\nfunction processWebhook(event) {\n  if (processedEvents.has(event.id)) {\n    console.log('Duplicate event, skipping');\n    return;\n  }\n  \n  processedEvents.add(event.id);\n  \n  // Process event\n  handleEvent(event);\n}\n",[536,2474,2475,2480,2484,2489,2494,2499,2504,2508,2512,2517,2521,2526,2531],{"__ignoreMap":689},[693,2476,2477],{"class":695,"line":82},[693,2478,2479],{},"const processedEvents = new Set();\n",[693,2481,2482],{"class":695,"line":114},[693,2483,719],{"emptyLinePlaceholder":718},[693,2485,2486],{"class":695,"line":146},[693,2487,2488],{},"function processWebhook(event) {\n",[693,2490,2491],{"class":695,"line":178},[693,2492,2493],{},"  if (processedEvents.has(event.id)) {\n",[693,2495,2496],{"class":695,"line":268},[693,2497,2498],{},"    console.log('Duplicate event, skipping');\n",[693,2500,2501],{"class":695,"line":273},[693,2502,2503],{},"    return;\n",[693,2505,2506],{"class":695,"line":279},[693,2507,798],{},[693,2509,2510],{"class":695,"line":285},[693,2511,748],{},[693,2513,2514],{"class":695,"line":291},[693,2515,2516],{},"  processedEvents.add(event.id);\n",[693,2518,2519],{"class":695,"line":222},[693,2520,748],{},[693,2522,2523],{"class":695,"line":227},[693,2524,2525],{},"  // Process event\n",[693,2527,2528],{"class":695,"line":232},[693,2529,2530],{},"  handleEvent(event);\n",[693,2532,2533],{"class":695,"line":238},[693,2534,1308],{},[525,2536,2538],{"id":2537},"_3-error-handling","3. Error Handling",[517,2540,2541],{},"Implement robust error handling:",[684,2543,2545],{"className":686,"code":2544,"language":688,"meta":689,"style":689},"async function handleSessionCompleted(data) {\n  try {\n    const session = await updateSessionInDatabase(data.session_id, data);\n    \n    if (data.confidence_score > 0.8) {\n      await notifyHighConfidenceResult(session);\n    }\n    \n  } catch (error) {\n    console.error('Error handling session completion:', error);\n    \n    // Retry logic or alert monitoring\n    await alertMonitoringSystem(error);\n  }\n}\n",[536,2546,2547,2552,2556,2561,2565,2570,2575,2579,2583,2587,2592,2596,2601,2606,2610],{"__ignoreMap":689},[693,2548,2549],{"class":695,"line":82},[693,2550,2551],{},"async function handleSessionCompleted(data) {\n",[693,2553,2554],{"class":695,"line":114},[693,2555,809],{},[693,2557,2558],{"class":695,"line":146},[693,2559,2560],{},"    const session = await updateSessionInDatabase(data.session_id, data);\n",[693,2562,2563],{"class":695,"line":178},[693,2564,780],{},[693,2566,2567],{"class":695,"line":268},[693,2568,2569],{},"    if (data.confidence_score > 0.8) {\n",[693,2571,2572],{"class":695,"line":273},[693,2573,2574],{},"      await notifyHighConfidenceResult(session);\n",[693,2576,2577],{"class":695,"line":279},[693,2578,879],{},[693,2580,2581],{"class":695,"line":285},[693,2582,780],{},[693,2584,2585],{"class":695,"line":291},[693,2586,896],{},[693,2588,2589],{"class":695,"line":222},[693,2590,2591],{},"    console.error('Error handling session completion:', error);\n",[693,2593,2594],{"class":695,"line":227},[693,2595,780],{},[693,2597,2598],{"class":695,"line":232},[693,2599,2600],{},"    // Retry logic or alert monitoring\n",[693,2602,2603],{"class":695,"line":238},[693,2604,2605],{},"    await alertMonitoringSystem(error);\n",[693,2607,2608],{"class":695,"line":243},[693,2609,798],{},[693,2611,2612],{"class":695,"line":248},[693,2613,1308],{},[525,2615,2617],{"id":2616},"_4-monitoring-and-logging","4. Monitoring and Logging",[517,2619,2620],{},"Monitor webhook delivery and processing:",[684,2622,2624],{"className":686,"code":2623,"language":688,"meta":689,"style":689},"// Log all incoming webhooks\napp.post('/webhook', (req, res) => {\n  console.log('Webhook received:', {\n    type: req.body.type,\n    id: req.body.id,\n    timestamp: new Date().toISOString()\n  });\n  \n  // ... processing logic\n});\n\n// Monitor webhook health\nsetInterval(async () => {\n  const stats = await getWebhookStats();\n  console.log('Webhook stats:', stats);\n}, 60000); // Every minute\n",[536,2625,2626,2631,2635,2640,2645,2650,2655,2659,2663,2668,2672,2676,2681,2686,2691,2696],{"__ignoreMap":689},[693,2627,2628],{"class":695,"line":82},[693,2629,2630],{},"// Log all incoming webhooks\n",[693,2632,2633],{"class":695,"line":114},[693,2634,733],{},[693,2636,2637],{"class":695,"line":146},[693,2638,2639],{},"  console.log('Webhook received:', {\n",[693,2641,2642],{"class":695,"line":178},[693,2643,2644],{},"    type: req.body.type,\n",[693,2646,2647],{"class":695,"line":268},[693,2648,2649],{},"    id: req.body.id,\n",[693,2651,2652],{"class":695,"line":273},[693,2653,2654],{},"    timestamp: new Date().toISOString()\n",[693,2656,2657],{"class":695,"line":279},[693,2658,2458],{},[693,2660,2661],{"class":695,"line":285},[693,2662,748],{},[693,2664,2665],{"class":695,"line":291},[693,2666,2667],{},"  // ... processing logic\n",[693,2669,2670],{"class":695,"line":222},[693,2671,919],{},[693,2673,2674],{"class":695,"line":227},[693,2675,719],{"emptyLinePlaceholder":718},[693,2677,2678],{"class":695,"line":232},[693,2679,2680],{},"// Monitor webhook health\n",[693,2682,2683],{"class":695,"line":238},[693,2684,2685],{},"setInterval(async () => {\n",[693,2687,2688],{"class":695,"line":243},[693,2689,2690],{},"  const stats = await getWebhookStats();\n",[693,2692,2693],{"class":695,"line":248},[693,2694,2695],{},"  console.log('Webhook stats:', stats);\n",[693,2697,2698],{"class":695,"line":771},[693,2699,2700],{},"}, 60000); // Every minute\n",[512,2702,2704],{"id":2703},"retry-policy","Retry Policy",[517,2706,2707],{},"MindPeeker automatically retries failed webhook deliveries:",[2709,2710,2711,2727],"table",{},[2712,2713,2714],"thead",{},[2715,2716,2717,2721,2724],"tr",{},[2718,2719,2720],"th",{},"Attempt",[2718,2722,2723],{},"Delay",[2718,2725,2726],{},"Max Duration",[2728,2729,2730,2742,2752,2763,2774,2785,2796],"tbody",{},[2715,2731,2732,2736,2739],{},[2733,2734,2735],"td",{},"1",[2733,2737,2738],{},"Immediate",[2733,2740,2741],{},"-",[2715,2743,2744,2747,2750],{},[2733,2745,2746],{},"2",[2733,2748,2749],{},"5 seconds",[2733,2751,2749],{},[2715,2753,2754,2757,2760],{},[2733,2755,2756],{},"3",[2733,2758,2759],{},"30 seconds",[2733,2761,2762],{},"35 seconds",[2715,2764,2765,2768,2771],{},[2733,2766,2767],{},"4",[2733,2769,2770],{},"2 minutes",[2733,2772,2773],{},"2 minutes 35 seconds",[2715,2775,2776,2779,2782],{},[2733,2777,2778],{},"5",[2733,2780,2781],{},"10 minutes",[2733,2783,2784],{},"12 minutes 35 seconds",[2715,2786,2787,2790,2793],{},[2733,2788,2789],{},"6",[2733,2791,2792],{},"30 minutes",[2733,2794,2795],{},"42 minutes 35 seconds",[2715,2797,2798,2801,2804],{},[2733,2799,2800],{},"7",[2733,2802,2803],{},"1 hour",[2733,2805,2806],{},"1 hour 42 minutes 35 seconds",[517,2808,2809,2810,2813],{},"If all retries fail, the webhook is marked as failed and you'll receive a ",[536,2811,2812],{},"webhook.failed"," event.",[512,2815,2817],{"id":2816},"managing-webhooks","Managing Webhooks",[525,2819,2821],{"id":2820},"list-webhooks","List Webhooks",[684,2823,2825],{"className":951,"code":2824,"language":953,"meta":689,"style":689},"curl -X GET https://api.mindpeeker.com/v1/webhooks \\\n  -H \"Authorization: Bearer your_api_key\"\n",[536,2826,2827,2840],{"__ignoreMap":689},[693,2828,2829,2831,2833,2836,2838],{"class":695,"line":82},[693,2830,961],{"class":960},[693,2832,965],{"class":964},[693,2834,2835],{"class":964}," GET",[693,2837,971],{"class":964},[693,2839,975],{"class":974},[693,2841,2842,2844,2846,2848],{"class":695,"line":114},[693,2843,980],{"class":964},[693,2845,984],{"class":983},[693,2847,987],{"class":964},[693,2849,1100],{"class":983},[525,2851,2853],{"id":2852},"update-webhook","Update Webhook",[684,2855,2857],{"className":951,"code":2856,"language":953,"meta":689,"style":689},"curl -X PATCH https://api.mindpeeker.com/v1/webhooks/{webhook_id} \\\n  -H \"Authorization: Bearer your_api_key\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"events\": [\"session.completed\", \"analysis.completed\"],\n    \"active\": true\n  }'\n",[536,2858,2859,2873,2885,2897,2905,2910,2914],{"__ignoreMap":689},[693,2860,2861,2863,2865,2868,2871],{"class":695,"line":82},[693,2862,961],{"class":960},[693,2864,965],{"class":964},[693,2866,2867],{"class":964}," PATCH",[693,2869,2870],{"class":964}," https://api.mindpeeker.com/v1/webhooks/{webhook_id}",[693,2872,975],{"class":974},[693,2874,2875,2877,2879,2881,2883],{"class":695,"line":114},[693,2876,980],{"class":964},[693,2878,984],{"class":983},[693,2880,987],{"class":964},[693,2882,990],{"class":983},[693,2884,975],{"class":974},[693,2886,2887,2889,2891,2893,2895],{"class":695,"line":146},[693,2888,980],{"class":964},[693,2890,984],{"class":983},[693,2892,1001],{"class":964},[693,2894,990],{"class":983},[693,2896,975],{"class":974},[693,2898,2899,2901,2903],{"class":695,"line":178},[693,2900,1010],{"class":964},[693,2902,1013],{"class":983},[693,2904,1016],{"class":964},[693,2906,2907],{"class":695,"line":268},[693,2908,2909],{"class":964},"    \"events\": [\"session.completed\", \"analysis.completed\"],\n",[693,2911,2912],{"class":695,"line":273},[693,2913,1056],{"class":964},[693,2915,2916,2918],{"class":695,"line":279},[693,2917,1061],{"class":964},[693,2919,1064],{"class":983},[525,2921,2923],{"id":2922},"delete-webhook","Delete Webhook",[684,2925,2927],{"className":951,"code":2926,"language":953,"meta":689,"style":689},"curl -X DELETE https://api.mindpeeker.com/v1/webhooks/{webhook_id} \\\n  -H \"Authorization: Bearer your_api_key\"\n",[536,2928,2929,2942],{"__ignoreMap":689},[693,2930,2931,2933,2935,2938,2940],{"class":695,"line":82},[693,2932,961],{"class":960},[693,2934,965],{"class":964},[693,2936,2937],{"class":964}," DELETE",[693,2939,2870],{"class":964},[693,2941,975],{"class":974},[693,2943,2944,2946,2948,2950],{"class":695,"line":114},[693,2945,980],{"class":964},[693,2947,984],{"class":983},[693,2949,987],{"class":964},[693,2951,1100],{"class":983},[512,2953,2955],{"id":2954},"testing","Testing",[525,2957,2959],{"id":2958},"local-development","Local Development",[517,2961,2962],{},"Use tools like ngrok to test webhooks locally:",[684,2964,2966],{"className":951,"code":2965,"language":953,"meta":689,"style":689},"ngrok http 3000\n\ncurl -X POST https://api.mindpeeker.com/v1/webhooks \\\n  -H \"Authorization: Bearer your_api_key\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://abc123.ngrok.io/webhook\",\n    \"events\": [\"session.completed\"],\n    \"secret\": \"test_secret\"\n  }'\n",[536,2967,2968,2979,2983,2995,3007,3019,3027,3032,3037,3042],{"__ignoreMap":689},[693,2969,2970,2973,2976],{"class":695,"line":82},[693,2971,2972],{"class":960},"ngrok",[693,2974,2975],{"class":964}," http",[693,2977,2978],{"class":1250}," 3000\n",[693,2980,2981],{"class":695,"line":114},[693,2982,719],{"emptyLinePlaceholder":718},[693,2984,2985,2987,2989,2991,2993],{"class":695,"line":146},[693,2986,961],{"class":960},[693,2988,965],{"class":964},[693,2990,968],{"class":964},[693,2992,971],{"class":964},[693,2994,975],{"class":974},[693,2996,2997,2999,3001,3003,3005],{"class":695,"line":178},[693,2998,980],{"class":964},[693,3000,984],{"class":983},[693,3002,987],{"class":964},[693,3004,990],{"class":983},[693,3006,975],{"class":974},[693,3008,3009,3011,3013,3015,3017],{"class":695,"line":268},[693,3010,980],{"class":964},[693,3012,984],{"class":983},[693,3014,1001],{"class":964},[693,3016,990],{"class":983},[693,3018,975],{"class":974},[693,3020,3021,3023,3025],{"class":695,"line":273},[693,3022,1010],{"class":964},[693,3024,1013],{"class":983},[693,3026,1016],{"class":964},[693,3028,3029],{"class":695,"line":279},[693,3030,3031],{"class":964},"    \"url\": \"https://abc123.ngrok.io/webhook\",\n",[693,3033,3034],{"class":695,"line":285},[693,3035,3036],{"class":964},"    \"events\": [\"session.completed\"],\n",[693,3038,3039],{"class":695,"line":291},[693,3040,3041],{"class":964},"    \"secret\": \"test_secret\"\n",[693,3043,3044,3046],{"class":695,"line":222},[693,3045,1061],{"class":964},[693,3047,1064],{"class":983},[525,3049,3051],{"id":3050},"test-events","Test Events",[517,3053,3054],{},"Send test events to your webhook:",[684,3056,3058],{"className":951,"code":3057,"language":953,"meta":689,"style":689},"curl -X POST https://api.mindpeeker.com/v1/webhooks/{webhook_id}/test \\\n  -H \"Authorization: Bearer your_api_key\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"event_type\": \"session.completed\",\n    \"test_data\": {\n      \"session_id\": \"test_session_123\",\n      \"confidence_score\": 0.85\n    }\n  }'\n",[536,3059,3060,3072,3084,3096,3104,3109,3114,3119,3124,3128],{"__ignoreMap":689},[693,3061,3062,3064,3066,3068,3070],{"class":695,"line":82},[693,3063,961],{"class":960},[693,3065,965],{"class":964},[693,3067,968],{"class":964},[693,3069,1087],{"class":964},[693,3071,975],{"class":974},[693,3073,3074,3076,3078,3080,3082],{"class":695,"line":114},[693,3075,980],{"class":964},[693,3077,984],{"class":983},[693,3079,987],{"class":964},[693,3081,990],{"class":983},[693,3083,975],{"class":974},[693,3085,3086,3088,3090,3092,3094],{"class":695,"line":146},[693,3087,980],{"class":964},[693,3089,984],{"class":983},[693,3091,1001],{"class":964},[693,3093,990],{"class":983},[693,3095,975],{"class":974},[693,3097,3098,3100,3102],{"class":695,"line":178},[693,3099,1010],{"class":964},[693,3101,1013],{"class":983},[693,3103,1016],{"class":964},[693,3105,3106],{"class":695,"line":268},[693,3107,3108],{"class":964},"    \"event_type\": \"session.completed\",\n",[693,3110,3111],{"class":695,"line":273},[693,3112,3113],{"class":964},"    \"test_data\": {\n",[693,3115,3116],{"class":695,"line":279},[693,3117,3118],{"class":964},"      \"session_id\": \"test_session_123\",\n",[693,3120,3121],{"class":695,"line":285},[693,3122,3123],{"class":964},"      \"confidence_score\": 0.85\n",[693,3125,3126],{"class":695,"line":291},[693,3127,879],{"class":964},[693,3129,3130,3132],{"class":695,"line":222},[693,3131,1061],{"class":964},[693,3133,1064],{"class":983},[512,3135,3137],{"id":3136},"sdk-support","SDK Support",[517,3139,3140],{},"All official SDKs provide webhook utilities:",[525,3142,3143],{"id":2231},"Python",[684,3145,3147],{"className":2229,"code":3146,"language":2231,"meta":689,"style":689},"from mindpeeker.webhooks import WebhookHandler\n\nhandler = WebhookHandler('your_webhook_secret')\n\n@handler.on('session.completed')\ndef handle_session_completed(event):\n    print(f\"Session {event.data.session_id} completed\")\n\n@app.route('/webhook', methods=['POST'])\ndef webhook():\n    event = handler.construct_event(request.data, request.headers['X-MindPeeker-Signature'])\n    handler.process_event(event)\n    return 'OK'\n",[536,3148,3149,3154,3158,3163,3167,3172,3177,3182,3186,3191,3196,3201,3206],{"__ignoreMap":689},[693,3150,3151],{"class":695,"line":82},[693,3152,3153],{},"from mindpeeker.webhooks import WebhookHandler\n",[693,3155,3156],{"class":695,"line":114},[693,3157,719],{"emptyLinePlaceholder":718},[693,3159,3160],{"class":695,"line":146},[693,3161,3162],{},"handler = WebhookHandler('your_webhook_secret')\n",[693,3164,3165],{"class":695,"line":178},[693,3166,719],{"emptyLinePlaceholder":718},[693,3168,3169],{"class":695,"line":268},[693,3170,3171],{},"@handler.on('session.completed')\n",[693,3173,3174],{"class":695,"line":273},[693,3175,3176],{},"def handle_session_completed(event):\n",[693,3178,3179],{"class":695,"line":279},[693,3180,3181],{},"    print(f\"Session {event.data.session_id} completed\")\n",[693,3183,3184],{"class":695,"line":285},[693,3185,719],{"emptyLinePlaceholder":718},[693,3187,3188],{"class":695,"line":291},[693,3189,3190],{},"@app.route('/webhook', methods=['POST'])\n",[693,3192,3193],{"class":695,"line":222},[693,3194,3195],{},"def webhook():\n",[693,3197,3198],{"class":695,"line":227},[693,3199,3200],{},"    event = handler.construct_event(request.data, request.headers['X-MindPeeker-Signature'])\n",[693,3202,3203],{"class":695,"line":232},[693,3204,3205],{},"    handler.process_event(event)\n",[693,3207,3208],{"class":695,"line":238},[693,3209,3210],{},"    return 'OK'\n",[525,3212,3213],{"id":688},"JavaScript",[684,3215,3217],{"className":686,"code":3216,"language":688,"meta":689,"style":689},"import { WebhookHandler } from '@mindpeeker/javascript';\n\nconst handler = new WebhookHandler('your_webhook_secret');\n\nhandler.on('session.completed', (event) => {\n  console.log(`Session ${event.data.session_id} completed`);\n});\n\n// In Express\napp.post('/webhook', (req, res) => {\n  const event = handler.constructEvent(req.body, req.headers['x-mindpeeker-signature']);\n  handler.processEvent(event);\n  res.status(200).send('OK');\n});\n",[536,3218,3219,3224,3228,3233,3237,3242,3247,3251,3255,3260,3264,3269,3274,3278],{"__ignoreMap":689},[693,3220,3221],{"class":695,"line":82},[693,3222,3223],{},"import { WebhookHandler } from '@mindpeeker/javascript';\n",[693,3225,3226],{"class":695,"line":114},[693,3227,719],{"emptyLinePlaceholder":718},[693,3229,3230],{"class":695,"line":146},[693,3231,3232],{},"const handler = new WebhookHandler('your_webhook_secret');\n",[693,3234,3235],{"class":695,"line":178},[693,3236,719],{"emptyLinePlaceholder":718},[693,3238,3239],{"class":695,"line":268},[693,3240,3241],{},"handler.on('session.completed', (event) => {\n",[693,3243,3244],{"class":695,"line":273},[693,3245,3246],{},"  console.log(`Session ${event.data.session_id} completed`);\n",[693,3248,3249],{"class":695,"line":279},[693,3250,919],{},[693,3252,3253],{"class":695,"line":285},[693,3254,719],{"emptyLinePlaceholder":718},[693,3256,3257],{"class":695,"line":291},[693,3258,3259],{},"// In Express\n",[693,3261,3262],{"class":695,"line":222},[693,3263,733],{},[693,3265,3266],{"class":695,"line":227},[693,3267,3268],{},"  const event = handler.constructEvent(req.body, req.headers['x-mindpeeker-signature']);\n",[693,3270,3271],{"class":695,"line":232},[693,3272,3273],{},"  handler.processEvent(event);\n",[693,3275,3276],{"class":695,"line":238},[693,3277,2434],{},[693,3279,3280],{"class":695,"line":243},[693,3281,919],{},[512,3283,353],{"id":3284},"troubleshooting",[525,3286,3288],{"id":3287},"common-issues","Common Issues",[3290,3291,3292,3309,3325,3341],"ol",{},[533,3293,3294,3298],{},[3295,3296,3297],"strong",{},"Invalid Signature",[530,3299,3300,3303,3306],{},[533,3301,3302],{},"Check webhook secret matches",[533,3304,3305],{},"Ensure raw payload is used for verification",[533,3307,3308],{},"Verify encoding (UTF-8)",[533,3310,3311,3314],{},[3295,3312,3313],{},"Timeout Errors",[530,3315,3316,3319,3322],{},[533,3317,3318],{},"Ensure webhook responds within 5 seconds",[533,3320,3321],{},"Process heavy operations asynchronously",[533,3323,3324],{},"Check network connectivity",[533,3326,3327,3330],{},[3295,3328,3329],{},"Duplicate Events",[530,3331,3332,3335,3338],{},[533,3333,3334],{},"Implement idempotency handling",[533,3336,3337],{},"Track processed event IDs",[533,3339,3340],{},"Use database transactions",[533,3342,3343,3346],{},[3295,3344,3345],{},"SSL Certificate Issues",[530,3347,3348,3351,3354],{},[533,3349,3350],{},"Ensure valid SSL certificate",[533,3352,3353],{},"Check certificate chain",[533,3355,3356],{},"Verify TLS version compatibility",[525,3358,3360],{"id":3359},"debug-mode","Debug Mode",[517,3362,3363],{},"Enable debug mode for detailed logging:",[684,3365,3367],{"className":686,"code":3366,"language":688,"meta":689,"style":689},"const handler = new WebhookHandler('your_webhook_secret', {\n  debug: true,\n  logLevel: 'verbose'\n});\n",[536,3368,3369,3374,3379,3384],{"__ignoreMap":689},[693,3370,3371],{"class":695,"line":82},[693,3372,3373],{},"const handler = new WebhookHandler('your_webhook_secret', {\n",[693,3375,3376],{"class":695,"line":114},[693,3377,3378],{},"  debug: true,\n",[693,3380,3381],{"class":695,"line":146},[693,3382,3383],{},"  logLevel: 'verbose'\n",[693,3385,3386],{"class":695,"line":178},[693,3387,919],{},[525,3389,3391],{"id":3390},"monitoring-dashboard","Monitoring Dashboard",[517,3393,3394],{},"Monitor webhook delivery in your MindPeeker dashboard:",[530,3396,3397,3400,3403,3406],{},[533,3398,3399],{},"Delivery success rate",[533,3401,3402],{},"Average response time",[533,3404,3405],{},"Error breakdown",[533,3407,3408],{},"Retry attempts",[512,3410,362],{"id":3411},"support",[517,3413,3414],{},"For webhook support:",[530,3416,3417,3427,3435,3442],{},[533,3418,3419,3420],{},"Documentation: ",[3421,3422,3426],"a",{"href":3423,"rel":3424},"https://docs.mindpeeker.com/webhooks",[3425],"nofollow","docs.mindpeeker.com/webhooks",[533,3428,3429,3430],{},"Status page: ",[3421,3431,3434],{"href":3432,"rel":3433},"https://status.mindpeeker.com",[3425],"status.mindpeeker.com",[533,3436,3437,3438],{},"Email: ",[3421,3439,3441],{"href":3440},"mailto:webhooks-support@mindpeeker.com","webhooks-support@mindpeeker.com",[533,3443,3444,3445],{},"Community: ",[3421,3446,3449],{"href":3447,"rel":3448},"https://community.mindpeeker.com",[3425],"community.mindpeeker.com",[3451,3452,3453],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":689,"searchDepth":82,"depth":114,"links":3455},[3456,3457,3464,3469,3472,3477,3483,3484,3489,3493,3497,3502],{"id":514,"depth":114,"text":515},{"id":522,"depth":114,"text":523,"children":3458},[3459,3460,3461,3462,3463],{"id":527,"depth":146,"text":528},{"id":566,"depth":146,"text":567},{"id":596,"depth":146,"text":597},{"id":620,"depth":146,"text":621},{"id":650,"depth":146,"text":651},{"id":674,"depth":114,"text":675,"children":3465},[3466,3467,3468],{"id":678,"depth":146,"text":679},{"id":944,"depth":146,"text":945},{"id":1067,"depth":146,"text":1068},{"id":1103,"depth":114,"text":1104,"children":3470},[3471],{"id":1311,"depth":146,"text":1312},{"id":2218,"depth":114,"text":2219,"children":3473},[3474,3475,3476],{"id":2222,"depth":146,"text":2223},{"id":2351,"depth":146,"text":2352},{"id":2366,"depth":146,"text":2367},{"id":2381,"depth":114,"text":399,"children":3478},[3479,3480,3481,3482],{"id":2384,"depth":146,"text":2385},{"id":2465,"depth":146,"text":2466},{"id":2537,"depth":146,"text":2538},{"id":2616,"depth":146,"text":2617},{"id":2703,"depth":114,"text":2704},{"id":2816,"depth":114,"text":2817,"children":3485},[3486,3487,3488],{"id":2820,"depth":146,"text":2821},{"id":2852,"depth":146,"text":2853},{"id":2922,"depth":146,"text":2923},{"id":2954,"depth":114,"text":2955,"children":3490},[3491,3492],{"id":2958,"depth":146,"text":2959},{"id":3050,"depth":146,"text":3051},{"id":3136,"depth":114,"text":3137,"children":3494},[3495,3496],{"id":2231,"depth":146,"text":3143},{"id":688,"depth":146,"text":3213},{"id":3284,"depth":114,"text":353,"children":3498},[3499,3500,3501],{"id":3287,"depth":146,"text":3288},{"id":3359,"depth":146,"text":3360},{"id":3390,"depth":146,"text":3391},{"id":3411,"depth":114,"text":362},"Real-time event notifications and webhook integration for MindPeeker platform","md",null,{"icon":388},{"icon":388,"order":273},{"title":385,"description":3503},"Z0cnjJj2A7whw9aIBnBOywxY2-O51k7300NfnDXf-_w",[3511,3513],{"title":381,"path":382,"stem":383,"description":3512,"icon":370,"order":268,"children":-1},"Official SDKs and libraries for integrating MindPeeker into your applications",{"title":390,"path":391,"stem":392,"description":3514,"icon":393,"order":279,"children":-1},"Step-by-step integration guides for different platforms and use cases",1776312212095]