When an event occurs that you have turned on, we will send an HTTP POST request to the URL specified for the given event. If we receive an HTTP Response code of 200, we deem the request as being successful; anything else will be considered a failure.If the request is considered a failure, the URL is unavailable, or the request takes too long to respond (more than 10 seconds), we’ll cancel the request and try again later:
Retries occur at 15-minute intervals
Retries continue for up to 48 hours (192 attempts total)
After 48 hours, failed webhooks are discarded
It cannot be assumed that webhook callbacks are sent in the proper order. Your application should check the request timestamp and act appropriately.
Respond quickly: Return a 2xx status code as soon as possible, even before processing the webhook. This prevents timeouts and unnecessary retries.
Process asynchronously: Handle time-consuming operations outside the request-response cycle. Queue the webhook for background processing and respond immediately.
Verify the verification key: Always validate the X-SmarterMeasure-Verification-Key (or URL parameter) to ensure the request is authentic.
Check timestamps: Don’t assume webhooks arrive in order; use the timestamp fields in the payload to process events correctly.
Handle retries: Be prepared for duplicate deliveries due to the retry mechanism. Use the callback_id to track which webhooks you’ve already processed.
Log everything: Keep detailed logs of webhook receipts, processing, and responses to help debug issues.
Always use timestamps from the payload, not the request time
For assistance with webhook implementation or troubleshooting, please contact our team at developers@smartermeasure.com.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"SmarterServices Platform","colors":{"primary":"#015692","light":"#0D9373","dark":"#015692"},"logo":{"light":"https://cdn.prod.website-files.com/650b016f7e13a7d9de337f22/6629053ca1393100c09aa484_SmarterServices%20Logo.png","dark":"https://cdn.prod.website-files.com/650b016f7e13a7d9de337f22/6629053ca1393100c09aa484_SmarterServices%20Logo.png"},"favicon":"https://mintcdn.com/smarterservicesllc/fCrC3qjG9fnKrDR3/favicon.png?fit=max\u0026auto=format\u0026n=fCrC3qjG9fnKrDR3\u0026q=85\u0026s=4ebd4e7b2756068bf227df06619633a6","api":{"openapi":["https://api.smarterproctoring.com/openapi.json","assessment/api/openapi.json"]},"navbar":{"links":[{"href":"https://intercom.help/smarterservices-llc-028a8a0949b6/en","label":"Support"}]},"footer":{"socials":{"website":"https://www.smarterservices.com","youtube":"https://www.youtube.com/@smarterservices","linkedin":"https://www.linkedin.com/company/smarterservices","facebook":"https://www.facebook.com/smarterservices","x":"https://x.com/smarterservices","github":"https://github.com/smarterservices"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"smarterservicesllc","hasAudioNarration":false,"actualSubdomain":"smarterservicesllc","customDomains":["developers.smarterservices.com"],"gitSource":{"type":"github","owner":"smarterservices","repo":"platform-documenation","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a5de60074e183eea51381f1","collectionId":"b4811552-fb4e-467d-88a2-623c3838f2d6","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a5de60074e183eea51381f1"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6a5de60074e183eea51381f1:success","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"Proctoring","count":70},{"language":"default","tag":"Endpoints","count":63},{"language":"default","tag":"Platform","count":33},{"language":"default","tag":"BlockKit","count":25},{"language":"default","tag":"Reports","count":17},{"language":"default","tag":"Assessment","count":16},{"language":"default","tag":"API Reference","count":13},{"language":"default","tag":"SmarterElements","count":10},{"language":"default","tag":"Security \u0026 Authorization","count":9},{"language":"default","tag":"Getting Started","count":8}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".elements-example{border:1px solid #ddd;border-radius:var(--rounded-2xl, 1rem);overflow-y:auto;padding:5px}"}],"page":{"pagePath":"assessment/webhooks/testing-and-troubleshooting","slug":"/assessment/webhooks/testing-and-troubleshooting","pageMetadata":{"title":"Testing \u0026 Troubleshooting","description":"Testing webhooks and best practices","icon":"bug","href":"/assessment/webhooks/testing-and-troubleshooting"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Testing webhooks and best practices\"\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={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`testing-\u0026-troubleshooting`,children:`Testing \u0026 Troubleshooting`}),`\n`,_jsx(Heading,{level:`2`,id:`testing-webhooks`,children:`Testing Webhooks`}),`\n`,_jsx(_components.p,{children:`Before implementing webhook handlers in production, you can test webhook delivery using tools like:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://requestbin.com/`,children:`RequestBin`}),` - Creates temporary endpoints to inspect webhook payloads`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://webhook.site/`,children:`Webhook.site`}),` - Provides instant webhook URLs for testing`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://ngrok.com/`,children:`Ngrok`}),` - Exposes your local development server to the internet for webhook testing`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`These tools let you see the exact payloads that will be sent, so you can verify your parsing logic before going live.`}),`\n`,_jsx(Heading,{level:`2`,id:`retry-policy`,children:`Retry Policy`}),`\n`,_jsx(_components.p,{children:`When an event occurs that you have turned on, we will send an HTTP POST request to the URL specified for the given event. If we receive an HTTP Response code of 200, we deem the request as being successful; anything else will be considered a failure.`}),`\n`,_jsx(_components.p,{children:`If the request is considered a failure, the URL is unavailable, or the request takes too long to respond (more than 10 seconds), we’ll cancel the request and try again later:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Retries occur at 15-minute intervals`}),`\n`,_jsx(_components.li,{children:`Retries continue for up to 48 hours (192 attempts total)`}),`\n`,_jsx(_components.li,{children:`After 48 hours, failed webhooks are discarded`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`It cannot be assumed that webhook callbacks are sent in the proper order. Your application should check the request timestamp and act appropriately.`})}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Best Practices`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Respond quickly`}),`: Return a 2xx status code as soon as possible, even before processing the webhook. This prevents timeouts and unnecessary retries.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Process asynchronously`}),`: Handle time-consuming operations outside the request-response cycle. Queue the webhook for background processing and respond immediately.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Verify the verification key`}),`: Always validate the `,_jsx(_components.code,{children:`X-SmarterMeasure-Verification-Key`}),` (or URL parameter) to ensure the request is authentic.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Check timestamps`}),`: Don’t assume webhooks arrive in order; use the timestamp fields in the payload to process events correctly.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Handle retries`}),`: Be prepared for duplicate deliveries due to the retry mechanism. Use the `,_jsx(_components.code,{children:`callback_id`}),` to track which webhooks you’ve already processed.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Log everything`}),`: Keep detailed logs of webhook receipts, processing, and responses to help debug issues.`]}),`\n`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`common-issues`,children:`Common Issues`}),`\n`,_jsx(Heading,{level:`3`,id:`not-receiving-webhooks`,children:`Not receiving webhooks`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Verify your URL is publicly accessible and not behind a firewall`}),`\n`,_jsx(_components.li,{children:`Check that your endpoint returns a 200 status code`}),`\n`,_jsx(_components.li,{children:`Ensure your server responds within 10 seconds`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`duplicate-webhooks`,children:`Duplicate webhooks`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`This is expected due to the retry mechanism`}),`\n`,_jsxs(_components.li,{children:[`Use the `,_jsx(_components.code,{children:`callback_id`}),` to deduplicate on your end`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`out-of-order-webhooks`,children:`Out of order webhooks`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Webhooks may not arrive in chronological order`}),`\n`,_jsx(_components.li,{children:`Always use timestamps from the payload, not the request time`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`For assistance with webhook implementation or troubleshooting, please contact our team at `,_jsx(_components.a,{href:`mailto:developers@smartermeasure.com`,children:`developers@smartermeasure.com`}),`.`]})]})}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":"Testing \u0026 Troubleshooting","description":"Testing webhooks and best practices","icon":"bug","href":"/assessment/webhooks/testing-and-troubleshooting"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Testing \u0026 Troubleshooting","slug":"testing-\u0026-troubleshooting","depth":1,"children":[]},{"title":"Testing Webhooks","slug":"testing-webhooks","depth":2,"children":[]},{"title":"Retry Policy","slug":"retry-policy","depth":2,"children":[]},{"title":"Best Practices","slug":"best-practices","depth":2,"children":[]},{"title":"Common Issues","slug":"common-issues","depth":2,"children":[{"title":"Not receiving webhooks","slug":"not-receiving-webhooks","depth":3,"children":[]},{"title":"Duplicate webhooks","slug":"duplicate-webhooks","depth":3,"children":[]},{"title":"Out of order webhooks","slug":"out-of-order-webhooks","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"smarterservicesllc","siteName":"SmarterServices Platform","title":"Testing \u0026 Troubleshooting - SmarterServices Platform","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-09T21:09:33.580Z","originalFileLocation":"assessment/webhooks/testing-and-troubleshooting.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=\"Testing webhooks and best practices\">\u003cmeta data-mint-head name=\"application-name\" content=\"SmarterServices Platform\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/smarterservicesllc/B1jO8o0ggqMDkB2a/_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/smarterservicesllc/B1jO8o0ggqMDkB2a/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/smarterservicesllc/B1jO8o0ggqMDkB2a/_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/smarterservicesllc/B1jO8o0ggqMDkB2a/_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/smarterservicesllc/B1jO8o0ggqMDkB2a/_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/smarterservicesllc/B1jO8o0ggqMDkB2a/_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/smarterservicesllc/B1jO8o0ggqMDkB2a/_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/smarterservicesllc/B1jO8o0ggqMDkB2a/_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/smarterservicesllc/B1jO8o0ggqMDkB2a/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Testing \u0026amp; Troubleshooting - SmarterServices Platform\">\u003cmeta data-mint-head property=\"og:description\" content=\"Testing webhooks and best practices\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"SmarterServices Platform\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.smarterservices.com/assessment/webhooks/testing-and-troubleshooting\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://smarterservicesllc.mintlify.app/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=Testing+%26+Troubleshooting\u0026amp;description=Testing+webhooks+and+best+practices\u0026amp;theme=4042a3185e49c2c9f63be8ee\u0026amp;signature=c273a0699d6ace635a8af0e42b740e5296c18b73d7e54d326db6ece90ba5e57f\">\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=\"Testing \u0026amp; Troubleshooting - SmarterServices Platform\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Testing webhooks and best practices\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://smarterservicesllc.mintlify.app/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=Testing+%26+Troubleshooting\u0026amp;description=Testing+webhooks+and+best+practices\u0026amp;theme=4042a3185e49c2c9f63be8ee\u0026amp;signature=c273a0699d6ace635a8af0e42b740e5296c18b73d7e54d326db6ece90ba5e57f\">\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/smarterservicesllc/B1jO8o0ggqMDkB2a/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"SmarterServices Platform\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#015692\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.smarterservices.com/assessment/webhooks/testing-and-troubleshooting\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/assessment/webhooks/testing-and-troubleshooting.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.smarterservices.com/#organization\",\"name\":\"SmarterServices Platform\",\"url\":\"https://developers.smarterservices.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://cdn.prod.website-files.com/650b016f7e13a7d9de337f22/6629053ca1393100c09aa484_SmarterServices%20Logo.png\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.smarterservices.com#website\",\"name\":\"SmarterServices Platform\",\"url\":\"https://developers.smarterservices.com\",\"publisher\":{\"@id\":\"https://developers.smarterservices.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.smarterservices.com/assessment/webhooks/testing-and-troubleshooting#webpage\",\"url\":\"https://developers.smarterservices.com/assessment/webhooks/testing-and-troubleshooting\",\"name\":\"Testing \u0026 Troubleshooting\",\"description\":\"Testing webhooks and best practices\",\"dateModified\":\"2026-06-09T21:09:33.580Z\",\"isPartOf\":{\"@id\":\"https://developers.smarterservices.com#website\"},\"breadcrumb\":{\"@id\":\"https://developers.smarterservices.com/assessment/webhooks/testing-and-troubleshooting#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.smarterservices.com/assessment/webhooks/testing-and-troubleshooting#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Webhooks\",\"item\":\"https://developers.smarterservices.com/assessment/webhooks/getting-started\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Testing \u0026 Troubleshooting\",\"item\":\"https://developers.smarterservices.com/assessment/webhooks/testing-and-troubleshooting\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://developers.smarterservices.com/assessment/webhooks/testing-and-troubleshooting#article\",\"headline\":\"Testing \u0026 Troubleshooting\",\"name\":\"Testing \u0026 Troubleshooting\",\"description\":\"Testing webhooks and best practices\",\"url\":\"https://developers.smarterservices.com/assessment/webhooks/testing-and-troubleshooting\",\"mainEntityOfPage\":{\"@id\":\"https://developers.smarterservices.com/assessment/webhooks/testing-and-troubleshooting#webpage\"},\"dateModified\":\"2026-06-09T21:09:33.580Z\",\"publisher\":{\"@id\":\"https://developers.smarterservices.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.smarterservices.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"SmarterServices Platform\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"SmarterServices Platform","nav":{"global":null,"tabs":[{"tab":"Platform","icon":"layer-group","pages":[{"title":"Platform","href":""}]},{"tab":"Assessment","icon":"pen-to-square","groups":[{"group":"API Reference","pages":[{"title":"Introduction","href":"/assessment/api/introduction"},{"title":"Authentication","href":"/assessment/api/authentication"},{"title":"Error Messages \u0026 Codes","href":"/assessment/api/errors"},{"group":"Users/Assessments","icon":"building","pages":[{"title":"Create User","openapi":"POST /users","href":"/assessment/api/users/create-user"},{"title":"Update User","openapi":"PUT /users/{userid}","href":"/assessment/api/users/update-user"},{"title":"List Users","openapi":"GET /users","href":"/assessment/api/users/list-users"},{"title":"Get User","openapi":"GET /users/{userid}","href":"/assessment/api/users/get-user"},{"title":"Sign On","openapi":"POST /users/{userid}/signon","href":"/assessment/api/users/signon"},{"title":"Report Link","openapi":"GET /users/{userid}/reportlink","href":"/assessment/api/users/report-link"}]},{"group":"Results","icon":"building","pages":[{"title":"User Results","openapi":"GET /users/{userid}/results","href":"/assessment/api/results/user-results"},{"title":"User Report","openapi":"GET /users/{userid}/report","href":"/assessment/api/results/user-report"},{"title":"Search Results","openapi":"GET /results","href":"/assessment/api/results/search"},{"title":"Search Results (expanded)","openapi":"GET /results/new","href":"/assessment/api/results/search-expanded"}]}]},{"group":"Webhooks","pages":[{"title":"Getting Started","icon":"rocket","href":"/assessment/webhooks/getting-started"},{"title":"Events \u0026 Payloads","description":"Webhook events and payload formats","icon":"code","href":"/assessment/webhooks/events-and-payloads"},{"title":"Testing \u0026 Troubleshooting","icon":"bug","href":"/assessment/webhooks/testing-and-troubleshooting"}]}]},{"tab":"Proctoring","icon":"camera-security","pages":[{"title":"Proctoring","href":"/proctoring/introduction"}]},{"tab":"SmarterElements","icon":"puzzle-piece","pages":[{"title":"SmarterElements","href":"/smarter-elements/overview"}]},{"tab":"Blog","icon":"book","href":"https://www.smarterservices.com/blog"}]},"title":"Testing \u0026 Troubleshooting - SmarterServices Platform","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":[],"chunks":[]}