Webhook endpoint used by Microsoft Graph for email notification events. - During subscription setup, Microsoft Graph sends a validation token as a query parameter, which must be echoed back. - For subsequent notifications, Microsoft Graph sends email event data in the request body. - This endpoint does not require authentication since it’s called by Microsoft servers.
POST
/
email-meter
/
reservation-hook
Microsoft Graph webhook for new email notifications
Webhook endpoint used by Microsoft Graph for email notification events. This endpoint does not require authentication since it’s called by Microsoft servers.
# Microsoft Graph calls this with validationTokencurl -X POST 'http://localhost:2000/email-meter/reservation-hook?validationToken=ValidationTokenExample123456'
Successfully processed the webhook event or returned validation token
The response is of type string.
Example:
"ValidationTokenExample123456"
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"COMPASS API Documentation","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/sunnysworldwide/HCiJaN8Ev2PARx5f/logo/light.svg?fit=max\u0026auto=format\u0026n=HCiJaN8Ev2PARx5f\u0026q=85\u0026s=80efd77089beefa2789e93b1a8fe49e7","dark":"https://mintcdn.com/sunnysworldwide/HCiJaN8Ev2PARx5f/logo/dark.svg?fit=max\u0026auto=format\u0026n=HCiJaN8Ev2PARx5f\u0026q=85\u0026s=b146a258ca502e5b08d8439bf5f59cd8"},"favicon":"/favicon.svg","navbar":{"links":[{"label":"Support","href":"https://support.example.com"}]},"footer":{"socials":{"github":"https://github.com/your-org/compass-api","website":"https://support.example.com/contact"}},"contextual":{"options":["copy","view"]},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"sunnysworldwide","hasAudioNarration":false,"actualSubdomain":"sunnysworldwide","customDomains":["compass.docs.sunnyscoach.com"],"gitSource":{"type":"github","owner":"sunnysworldwide","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":false},"entitlements":{},"buildId":"6ae9415197323dc37fd6a29c:success","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"HubSpot Tickets","count":15},{"language":"default","tag":"Email Meter","count":13},{"language":"default","tag":"Stats","count":11},{"language":"default","tag":"Users","count":10},{"language":"default","tag":"Departments","count":7},{"language":"default","tag":"Overview","count":7},{"language":"default","tag":"Getting Started","count":5},{"language":"default","tag":"Profile Management","count":5},{"language":"default","tag":"Authentication","count":4},{"language":"default","tag":"OAuth \u0026 Sessions","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"email-meter/webhook","slug":"/email-meter/webhook","pageMetadata":{"title":"Microsoft Graph Webhook","openapi":"POST /email-meter/reservation-hook","description":"Webhook endpoint used by Microsoft Graph for email notification events. - During subscription setup, Microsoft Graph sends a **validation token** as a query parameter, which must be echoed back. - For subsequent notifications, Microsoft Graph sends email event data in the request body. - This endpoint does **not require authentication** since it's called by Microsoft servers.\n","href":"/email-meter/webhook"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Webhook endpoint used by Microsoft Graph for email notification events. - During subscription setup, Microsoft Graph sends a \", _jsx(_components.strong, {\n children: \"validation token\"\n }), \" as a query parameter, which must be echoed back. - For subsequent notifications, Microsoft Graph sends email event data in the request body. - This endpoint does \", _jsx(_components.strong, {\n children: \"not require authentication\"\n }), \" since it’s called by Microsoft servers.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Webhook endpoint used by Microsoft Graph for email notification events. This endpoint does not require authentication since it’s called by Microsoft servers.`}),`\n`,_jsx(Heading,{level:`2`,id:`request`,children:`Request`}),`\n`,_jsx(Heading,{level:`3`,id:`query-parameters`,children:`Query Parameters`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Parameter`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsx(_components.tbody,{children:_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`validationToken`}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Validation token sent by Microsoft Graph during webhook registration`})]})})]}),`\n`,_jsx(Heading,{level:`3`,id:`request-body-for-email-notifications`,children:`Request Body (for email notifications)`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`12`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`12`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"value\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"subscriptionId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"a12b34cd-56e7-890f-12gh-3456ijkl7890\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"changeType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"created\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"resource\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"me/messages/AAMkADNkZDIxY2E1L...\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"resourceData\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"AAMkADNkZDIxY2E1LTQzNDUtNGUwYS04ZTFlLTY1NjVhYjMxZTc2MwBGAAAAA...\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`request-body-schema`,children:`Request Body Schema`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`value`}),_jsx(_components.td,{children:`array`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Array of Microsoft Graph notification objects`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`subscriptionId`}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Unique subscription identifier`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`changeType`}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Type of change (created, updated, deleted)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`resource`}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Resource identifier`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`resourceData`}),_jsx(_components.td,{children:`object`}),_jsx(_components.td,{children:`No`}),_jsx(_components.td,{children:`Data about the changed resource`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`response`,children:`Response`}),`\n`,_jsx(Heading,{level:`3`,id:`200-ok-webhook-validation-returns-validation-token`,children:`200 OK - Webhook validation (returns validation token)`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`ValidationTokenExample123456`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`200-ok-email-notification-processed`,children:`200 OK - Email notification processed`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"processed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Email notification received and queued for processing\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`400-bad-request`,children:`400 Bad Request`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INVALID_REQUEST\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Invalid or malformed request\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`500-internal-server-error`,children:`500 Internal Server Error`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"SERVER_ERROR\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Internal server error\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`examples`,children:`Examples`}),`\n`,_jsx(Heading,{level:`3`,id:`webhook-validation-during-setup`,children:`Webhook Validation (during setup)`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Microsoft Graph calls this with validationToken`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'http://localhost:2000/email-meter/reservation-hook?validationToken=ValidationTokenExample123456'`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`email-notification-real-time`,children:`Email Notification (real-time)`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`15`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`15`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Microsoft Graph calls this when new email arrives`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'http://localhost:2000/email-meter/reservation-hook'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Content-Type: application/json'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"value\": [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"subscriptionId\": \"a12b34cd-56e7-890f-12gh-3456ijkl7890\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"changeType\": \"created\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"resource\": \"me/messages/AAMkADNkZDIxY2E1L...\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"resourceData\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"id\": \"AAMkADNkZDIxY2E1LTQzNDUtNGUwYS04ZTFlLTY1NjVhYjMxZTc2MwBGAAAAA...\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`notes`,children:`Notes`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`No Authentication Required`}),`: This endpoint is called by Microsoft servers`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Two Modes`}),`: Validation during setup, notifications during operation`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Validation Token`}),`: Must be echoed back exactly as received during setup`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Real-time Processing`}),`: Email notifications are processed immediately`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Queue System`}),`: Notifications are queued for asynchronous processing`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`webhook-lifecycle`,children:`Webhook Lifecycle`}),`\n`,_jsx(Heading,{level:`3`,id:`1-setup-phase`,children:`1. Setup Phase`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Microsoft Graph sends validation token`}),`\n`,_jsx(_components.li,{children:`Endpoint returns the token unchanged`}),`\n`,_jsx(_components.li,{children:`Subscription becomes active`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`2-operation-phase`,children:`2. Operation Phase`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Microsoft Graph sends email event notifications`}),`\n`,_jsx(_components.li,{children:`Endpoint processes and acknowledges notifications`}),`\n`,_jsx(_components.li,{children:`Emails are analyzed and statistics updated`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`event-types`,children:`Event Types`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Change Type`}),_jsx(_components.th,{children:`Description`}),_jsx(_components.th,{children:`Action Taken`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`created`}),_jsx(_components.td,{children:`New email received`}),_jsx(_components.td,{children:`Analyze email, update stats`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`updated`}),_jsx(_components.td,{children:`Email modified`}),_jsx(_components.td,{children:`Re-analyze if needed`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`deleted`}),_jsx(_components.td,{children:`Email deleted`}),_jsx(_components.td,{children:`Update statistics accordingly`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`processing-flow`,children:`Processing Flow`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Receive Notification`}),`: Microsoft Graph sends webhook`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Validate Request`}),`: Verify source and format`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Queue for Processing`}),`: Add to analysis queue`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Email Analysis`}),`: Extract metadata and content`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Update Statistics`}),`: Refresh all relevant metrics`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Trigger Notifications`}),`: Send alerts if configured`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`security-considerations`,children:`Security Considerations`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Source Verification`}),`: Verify requests come from Microsoft Graph`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Rate Limiting`}),`: Handle high volume of notifications`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Data Privacy`}),`: Process email content securely`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Error Handling`}),`: Graceful degradation on processing failures`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsx(Heading,{level:`3`,id:`common-issues`,children:`Common Issues`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Validation Fails`}),`: Ensure exact token is returned`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Missing Notifications`}),`: Check subscription status`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Processing Delays`}),`: Monitor queue health`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Duplicate Events`}),`: Implement deduplication logic`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`monitoring`,children:`Monitoring`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Track webhook response times`}),`\n`,_jsx(_components.li,{children:`Monitor notification processing queue`}),`\n`,_jsx(_components.li,{children:`Alert on failed validation attempts`}),`\n`,_jsx(_components.li,{children:`Log all webhook events for auditing`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`configuration`,children:`Configuration`}),`\n`,_jsx(_components.p,{children:`The webhook endpoint URL must be:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Publicly accessible`}),`: Microsoft servers must reach it`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`HTTPS enabled`}),`: Required for security`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Responsive`}),`: Must respond within timeout limits`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reliable`}),`: Handle Microsoft’s retry logic`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Best Practices`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Fast Response`}),`: Respond quickly to webhook calls`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Async Processing`}),`: Use background jobs for email analysis`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Error Recovery`}),`: Implement retry logic for failures`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Logging`}),`: Log all webhook events for debugging`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Monitoring`}),`: Set up alerts for webhook health`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Microsoft Graph Webhook","openapi":"POST /email-meter/reservation-hook","description":"Webhook endpoint used by Microsoft Graph for email notification events. - During subscription setup, Microsoft Graph sends a **validation token** as a query parameter, which must be echoed back. - For subsequent notifications, Microsoft Graph sends email event data in the request body. - This endpoint does **not require authentication** since it's called by Microsoft servers.\n","href":"/email-meter/webhook"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Request","slug":"request","depth":2,"children":[{"title":"Query Parameters","slug":"query-parameters","depth":3,"children":[]},{"title":"Request Body (for email notifications)","slug":"request-body-for-email-notifications","depth":3,"children":[]},{"title":"Request Body Schema","slug":"request-body-schema","depth":3,"children":[]}]},{"title":"Response","slug":"response","depth":2,"children":[{"title":"200 OK - Webhook validation (returns validation token)","slug":"200-ok-webhook-validation-returns-validation-token","depth":3,"children":[]},{"title":"200 OK - Email notification processed","slug":"200-ok-email-notification-processed","depth":3,"children":[]},{"title":"400 Bad Request","slug":"400-bad-request","depth":3,"children":[]},{"title":"500 Internal Server Error","slug":"500-internal-server-error","depth":3,"children":[]}]},{"title":"Examples","slug":"examples","depth":2,"children":[{"title":"Webhook Validation (during setup)","slug":"webhook-validation-during-setup","depth":3,"children":[]},{"title":"Email Notification (real-time)","slug":"email-notification-real-time","depth":3,"children":[]}]},{"title":"Notes","slug":"notes","depth":2,"children":[]},{"title":"Webhook Lifecycle","slug":"webhook-lifecycle","depth":2,"children":[{"title":"1. Setup Phase","slug":"1-setup-phase","depth":3,"children":[]},{"title":"2. Operation Phase","slug":"2-operation-phase","depth":3,"children":[]}]},{"title":"Event Types","slug":"event-types","depth":2,"children":[]},{"title":"Processing Flow","slug":"processing-flow","depth":2,"children":[]},{"title":"Security Considerations","slug":"security-considerations","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[{"title":"Common Issues","slug":"common-issues","depth":3,"children":[]},{"title":"Monitoring","slug":"monitoring","depth":3,"children":[]}]},{"title":"Configuration","slug":"configuration","depth":2,"children":[]},{"title":"Best Practices","slug":"best-practices","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Email Meter"],"summary":"Microsoft Graph webhook for new email notifications","description":"Webhook endpoint used by Microsoft Graph for email notification events. - During subscription setup, Microsoft Graph sends a **validation token** as a query parameter, which must be echoed back. - For subsequent notifications, Microsoft Graph sends email event data in the request body. - This endpoint does **not require authentication** since it's called by Microsoft servers.\n","parameters":["3d58af34-1142-4df4-8201-5016b1d80b13"],"requestBody":"73cc9b5b-4b1c-4725-a5ff-9d23a6182e69","responses":{"200":"d5caa682-07de-401f-af99-eba320b76ba5","400":"4c2ec56c-32ca-4c20-b4b6-d13c06eac371","500":"a7e4dab1-3da7-41bb-b63a-568d2c44054d"},"method":"post","type":"path","servers":["0e9481de-a1a8-418c-afbd-3b5a789a9d98"],"security":[],"path":"/email-meter/reservation-hook","baseUrlOptions":["http://localhost:2000"],"title":"Microsoft Graph webhook for new email notifications","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"3d58af34-1142-4df4-8201-5016b1d80b13":{"name":"validationToken","in":"query","required":false,"description":"Validation token sent by Microsoft Graph during webhook registration. The API must return this token as plain text to validate the subscription.\n","schema":{"type":"string","isRequired":false,"description":"Validation token sent by Microsoft Graph during webhook registration. The API must return this token as plain text to validate the subscription.\n","uniqueKey":"","typeLabel":"string"},"example":"ValidationTokenExample123456"}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"array","description":"Array of Microsoft Graph notification objects.","items":{"type":"object","properties":{"subscriptionId":{"type":"string","example":"a12b34cd-56e7-890f-12gh-3456ijkl7890","uniqueKey":"value.items.[INDEX].subscriptionId","typeLabel":"string"},"changeType":{"type":"string","example":"created","uniqueKey":"value.items.[INDEX].changeType","typeLabel":"string"},"resource":{"type":"string","example":"me/messages/AAMkADNkZDIxY2E1L...","uniqueKey":"value.items.[INDEX].resource","typeLabel":"string"},"resourceData":{"type":"object","properties":{"id":{"type":"string","example":"AAMkADNkZDIxY2E1LTQzNDUtNGUwYS04ZTFlLTY1NjVhYjMxZTc2MwBGAAAAA...","uniqueKey":"value.items.[INDEX].resourceData.id","typeLabel":"string"}},"uniqueKey":"value.items.[INDEX].resourceData","typeLabel":"object"}},"uniqueKey":"value.items.[INDEX]","typeLabel":"object"},"uniqueKey":"value","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"value":[{"subscriptionId":"a12b34cd-56e7-890f-12gh-3456ijkl7890","changeType":"created","resource":"me/messages/AAMkADNkZDIxY2E1L...","resourceData":{"id":"AAMkADNkZDIxY2E1LTQzNDUtNGUwYS04ZTFlLTY1NjVhYjMxZTc2MwBGAAAAA..."}}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"d5caa682-07de-401f-af99-eba320b76ba5":{"description":"Successfully processed the webhook event or returned validation token","content":{"text/plain":{"schema":{"type":"string","example":"ValidationTokenExample123456","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"ValidationTokenExample123456"}},"exampleType":"generated"}},"exampleType":"generated"},"4c2ec56c-32ca-4c20-b4b6-d13c06eac371":{"description":"Invalid or malformed request","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"a7e4dab1-3da7-41bb-b63a-568d2c44054d":{"description":"Server error","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{},"servers":{"0e9481de-a1a8-418c-afbd-3b5a789a9d98":{"url":"http://localhost:2000","description":"Local development server"}}},"originalFileLocation":"openapi.yaml"},"subdomain":"sunnysworldwide","siteName":"COMPASS API Documentation","title":"Microsoft Graph Webhook - COMPASS API Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"email-meter/webhook.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Webhook endpoint used by Microsoft Graph for email notification events. - During subscription setup, Microsoft Graph sends a validation token as a query parameter, which must be echoed back. - For subsequent notifications, Microsoft Graph sends email event data in the request body. - This endpoint does not require authentication since it\u0026#x27;s called by Microsoft servers.\">\u003cmeta data-mint-head name=\"application-name\" content=\"COMPASS API Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/sunnysworldwide/7ftd3u0pmMdUXIrR/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/sunnysworldwide/7ftd3u0pmMdUXIrR/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/sunnysworldwide/7ftd3u0pmMdUXIrR/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/sunnysworldwide/7ftd3u0pmMdUXIrR/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/sunnysworldwide/7ftd3u0pmMdUXIrR/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/sunnysworldwide/7ftd3u0pmMdUXIrR/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/sunnysworldwide/7ftd3u0pmMdUXIrR/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/sunnysworldwide/7ftd3u0pmMdUXIrR/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/sunnysworldwide/7ftd3u0pmMdUXIrR/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Microsoft Graph Webhook - COMPASS API Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Webhook endpoint used by Microsoft Graph for email notification events. - During subscription setup, Microsoft Graph sends a validation token as a query parameter, which must be echoed back. - For subsequent notifications, Microsoft Graph sends email event data in the request body. - This endpoint does not require authentication since it\u0026#x27;s called by Microsoft servers.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"COMPASS API Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://compass.docs.sunnyscoach.com/email-meter/webhook\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://sunnysworldwide.mintlify.site/_mintlify/api/og/v2?division=Setup+%26+Integration\u0026amp;title=Microsoft+Graph+Webhook\u0026amp;description=Webhook+endpoint+used+by+Microsoft+Graph+for+email+notification+events.+++-+During+subscription+setup%2C+Microsoft+Graph+sends+a+**validation+token**+as+a+query+p\u0026amp;theme=2e19ca0cce3fdf6c752d2728\u0026amp;signature=3142aa188241fbca5da506af25e7f14510ff490c53c589dda384b5f402014e97\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Microsoft Graph Webhook - COMPASS API Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Webhook endpoint used by Microsoft Graph for email notification events. - During subscription setup, Microsoft Graph sends a validation token as a query parameter, which must be echoed back. - For subsequent notifications, Microsoft Graph sends email event data in the request body. - This endpoint does not require authentication since it\u0026#x27;s called by Microsoft servers.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://sunnysworldwide.mintlify.site/_mintlify/api/og/v2?division=Setup+%26+Integration\u0026amp;title=Microsoft+Graph+Webhook\u0026amp;description=Webhook+endpoint+used+by+Microsoft+Graph+for+email+notification+events.+++-+During+subscription+setup%2C+Microsoft+Graph+sends+a+**validation+token**+as+a+query+p\u0026amp;theme=2e19ca0cce3fdf6c752d2728\u0026amp;signature=3142aa188241fbca5da506af25e7f14510ff490c53c589dda384b5f402014e97\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/sunnysworldwide/7ftd3u0pmMdUXIrR/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"COMPASS API Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://compass.docs.sunnyscoach.com/email-meter/webhook\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/email-meter/webhook.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://compass.docs.sunnyscoach.com/#organization\",\"name\":\"COMPASS API Documentation\",\"url\":\"https://compass.docs.sunnyscoach.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/sunnysworldwide/HCiJaN8Ev2PARx5f/logo/light.svg?fit=max\u0026auto=format\u0026n=HCiJaN8Ev2PARx5f\u0026q=85\u0026s=80efd77089beefa2789e93b1a8fe49e7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://compass.docs.sunnyscoach.com#website\",\"name\":\"COMPASS API Documentation\",\"url\":\"https://compass.docs.sunnyscoach.com\",\"publisher\":{\"@id\":\"https://compass.docs.sunnyscoach.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://compass.docs.sunnyscoach.com/email-meter/webhook#webpage\",\"url\":\"https://compass.docs.sunnyscoach.com/email-meter/webhook\",\"name\":\"Microsoft Graph Webhook\",\"description\":\"Webhook endpoint used by Microsoft Graph for email notification events. - During subscription setup, Microsoft Graph sends a validation token as a query parameter, which must be echoed back. - For subsequent notifications, Microsoft Graph sends email event data in the request body. - This endpoint does not require authentication since it's called by Microsoft servers.\",\"isPartOf\":{\"@id\":\"https://compass.docs.sunnyscoach.com#website\"},\"breadcrumb\":{\"@id\":\"https://compass.docs.sunnyscoach.com/email-meter/webhook#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://compass.docs.sunnyscoach.com/email-meter/webhook#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"COMPASS API Documentation\",\"item\":\"https://compass.docs.sunnyscoach.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microsoft Graph Webhook\",\"item\":\"https://compass.docs.sunnyscoach.com/email-meter/webhook\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://compass.docs.sunnyscoach.com/email-meter/webhook#apireference\",\"headline\":\"Microsoft Graph Webhook\",\"name\":\"Microsoft Graph Webhook\",\"description\":\"Webhook endpoint used by Microsoft Graph for email notification events. - During subscription setup, Microsoft Graph sends a validation token as a query parameter, which must be echoed back. - For subsequent notifications, Microsoft Graph sends email event data in the request body. - This endpoint does not require authentication since it's called by Microsoft servers.\",\"url\":\"https://compass.docs.sunnyscoach.com/email-meter/webhook\",\"mainEntityOfPage\":{\"@id\":\"https://compass.docs.sunnyscoach.com/email-meter/webhook#webpage\"},\"publisher\":{\"@id\":\"https://compass.docs.sunnyscoach.com/#organization\"},\"isPartOf\":{\"@id\":\"https://compass.docs.sunnyscoach.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"COMPASS API Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"COMPASS API Documentation","nav":{"global":null,"tabs":[{"tab":"Geocoding","pages":[{"title":"Geocoding","href":"/geocoding"}]},{"tab":"Components","pages":[{"title":"Components","href":"/components/globe"}]},{"tab":"Overview","pages":[{"title":"Overview","href":"/overview/introduction"}]},{"tab":"Events \u0026 Venues","pages":[{"title":"Events \u0026 Venues","href":"/docs/calendar"}]},{"tab":"Authentication","pages":[{"title":"Authentication","href":"/auth/signin-google"}]},{"tab":"Users","pages":[{"title":"Users","href":"/users/profile"}]},{"tab":"Departments","pages":[{"title":"Departments","href":"/departments/list"}]},{"tab":"Email Meter","groups":[{"group":"Setup \u0026 Integration","pages":[{"title":"Microsoft Graph Webhook","openapi":"POST /email-meter/reservation-hook","href":"/email-meter/webhook"}]},{"group":"Email Statistics","pages":[{"title":"Email Count Statistics","openapi":"GET /email-meter/stats/email-counts/{startDate}/{endDate}","description":"Returns email conversation and thread statistics for a specified date range. - Counts total conversations, responded conversations, spam, and \"no response required\" messages. - Tracks incoming and sent email counts, average thread size, and number of unique email addresses involved.\n","href":"/email-meter/stats/email-counts"},{"title":"Email Response Time Statistics","openapi":"GET /email-meter/stats/response-times/{startDate}/{endDate}","href":"/email-meter/stats/response-times"},{"title":"Daily Email Activity Trend","openapi":"GET /email-meter/stats/emails-trend/{startDate}/{endDate}","href":"/email-meter/stats/emails-trend"}]},{"group":"Agent Analytics","pages":[{"title":"Agent Performance Summary","openapi":"GET /email-meter/stats/agents-highlevel/{startDate}/{endDate}","href":"/email-meter/stats/agents-highlevel"},{"title":"Detailed Agent Statistics","openapi":"GET /email-meter/stats/agents/{startDate}/{endDate}","href":"/email-meter/stats/agents-detailed"},{"title":"Conversation Resolution Times","openapi":"GET /email-meter/stats/resolved-times/{startDate}/{endDate}","href":"/email-meter/stats/resolved-times"}]},{"group":"Performance Metrics","pages":[{"title":"Flagged Conversation Statistics","openapi":"GET /email-meter/stats/flags/{startDate}/{endDate}","href":"/email-meter/stats/flags"},{"title":"Hourly Email Traffic Trends","openapi":"GET /email-meter/stats/hourly-trends/{startDate}/{endDate}","href":"/email-meter/stats/hourly-trends"}]},{"group":"Client Analytics","pages":[{"title":"Top Client Domains","openapi":"GET /email-meter/stats/clients/top-10/:startDate/:endDate}","href":"/email-meter/stats/clients/top-domains"},{"title":"Clients with Lowest Resolution Rates","openapi":"GET /email-meter/stats/clients/lowest-resolved/{startDate}/{endDate}","href":"/email-meter/stats/clients/lowest-resolved"},{"title":"Client Domain Email Trends","openapi":"GET /email-meter/stats/clients/incoming-emails-trend/{startDate}/{endDate}","href":"/email-meter/stats/clients/incoming-trends"},{"title":"Client Domain Response Times","openapi":"GET /email-meter/stats/clients/longest-response-times/{startDate}/{endDate}","href":"/email-meter/stats/clients/response-times"}]}]},{"tab":"HubSpot Tickets","pages":[{"title":"HubSpot Tickets","href":"/hubspot-tickets/list-filters"}]},{"tab":"Permissions","pages":[{"title":"Permissions","href":"/permissions/list"}]},{"tab":"Transcription","pages":[{"title":"Transcription","href":"/transcription/get-transcription"}]}]},"basePath":"","title":"Microsoft Graph Webhook - COMPASS API Documentation","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","clsx-D-TRO5q5.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CdrJecqK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CHlcWBLM.js"]}