Register a webhook in the Bodyguard dashboard to receive notifications on your endpoint.
A webhook notifies your endpoint when events occur in Bodyguard, such as a message or an author being updated. This page walks you through registering one in the dashboard. To learn how webhooks work, see the Webhooks introduction.
You need a public HTTPS endpoint that is ready to receive notifications. Bodyguard denies webhooks registered with an http URL. See the Quick start to build your endpoint and verify the signature of each request.
Click the gear icon in the left menu to open Settings, select Webhooks, then click Add webhook.
Settings > Webhooks
Fill in the form. The numbers match the screenshot below.1. Enter the Endpoint URL that receives notifications. It must be publicly reachable over HTTPS. 2. Add at least one Alert contact. Bodyguard notifies your contacts when deliveries to this endpoint fail. Each contact must be a user registered to your organization on the dashboard. 3. Choose the Sources the webhook applies to. In this example, All the organization’s API sources is selected. 4. Select the Events you subscribe to: message.updated (when a message is updated by Bodyguard) and author.updated (when an author is updated by Bodyguard). 5. Click Create webhook.
When you create the webhook, Bodyguard sends a webhook.validate event to your endpoint. Your endpoint must answer it with a 2xx status code.
2
Copy your signing secret
Bodyguard generates a signing secret when you create the webhook and displays it in the Webhook created dialog. Copy it with the copy icon and store it somewhere safe, then click Done. The secret starts with whsec_.
Signing secret displayed at creation
The signing secret is shown only once. You can’t see it again after closing the dialog. Treat it like a password and never expose it in client-side code.
You use the signing secret to verify that each request comes from Bodyguard. See the Quick start.
3
Enable and test your webhook
Your webhook is created with the Disabled status. Enable it once your endpoint is ready to receive events. Click the ⋮ menu at the end of the webhook row to open its actions:
Webhook actions menu
Enable webhook activates the webhook.
Send test event lets you check that your endpoint receives events.
Edit webhook and Delete webhook let you change or remove the webhook.
While a webhook is disabled, Bodyguard doesn’t send its events, and they can’t be replayed when you enable the webhook again. See Webhook statuses.
Build an endpoint and verify each request with a Standard Webhooks library.
Configuration
Events, signing secret, contacts, and webhook statuses.
Handling errors
What happens when your endpoint fails, and how to recover.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Bodyguard","description":"Bodyguard Product Documentation","colors":{"primary":"#003c7c","light":"#24bfe2","dark":"#00356b"},"logo":{"light":"https://mintcdn.com/bodyguardai/CXXaMNDOCYmwXYkN/images/logo-light.svg?fit=max\u0026auto=format\u0026n=CXXaMNDOCYmwXYkN\u0026q=85\u0026s=53fbcc63f9cb65a2b24e72faf85fcbc6","dark":"https://mintcdn.com/bodyguardai/CXXaMNDOCYmwXYkN/images/logo-dark.svg?fit=max\u0026auto=format\u0026n=CXXaMNDOCYmwXYkN\u0026q=85\u0026s=6493bb8bbf5fcf8d13db821f0694db4f","href":"/en/documentation/introduction"},"favicon":"https://mintcdn.com/bodyguardai/bT4NridthvvIprMF/images/favicon.svg?fit=max\u0026auto=format\u0026n=bT4NridthvvIprMF\u0026q=85\u0026s=2b8d9703c3fcc88f4fb43893eeee43db","appearance":{"default":"light"},"navbar":{"primary":{"type":"button","label":"Dashboard","href":"https://app.bodyguard.ai"}},"footer":{"socials":{"x":"https://twitter.com/Bodyguard_intl","facebook":"https://www.facebook.com/Bodyguard.intl","instagram":"https://www.instagram.com/bodyguard.ai","linkedin":"https://www.linkedin.com/company/bodyguard-intl"},"links":[{"header":"Resources","items":[{"label":"Status page","href":"https://status.bodyguard.ai"}]}]},"seo":{"indexing":"all"},"fonts":{"family":"Inter"},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","latex":false},"navigation":{"languages":[{"language":"en","href":"en/documentation/introduction"},{"language":"fr","href":"fr/documentation/introduction"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"bodyguardai","hasAudioNarration":false,"actualSubdomain":"bodyguardai","customDomains":["docs.bodyguard.ai"],"gitSource":{"type":"github","owner":"bodyguard-ai","repo":"documentation","deployBranch":"main","isPrivate":true,"contentDirectory":"","mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad888421646e33e3282fbb3","collectionId":"fb3abaa9-b1c6-45f1-ad56-589df2da424c","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad888421646e33e3282fbb3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae8bd576e6e556c3ab80981","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"en","tag":"API Reference","count":8},{"language":"fr","tag":"Référence API","count":8},{"language":"en","tag":"Documentation","count":6},{"language":"fr","tag":"Documentation","count":6},{"language":"default","tag":"API Reference","count":6},{"language":"default","tag":"Reference","count":6},{"language":"en","tag":"Webhooks","count":5},{"language":"fr","tag":"Webhooks","count":5},{"language":"en","tag":"API Documentation","count":3},{"language":"en","tag":"Taxonomy","count":3},{"language":"fr","tag":"Documentation API","count":3},{"language":"fr","tag":"Taxonomie","count":3},{"language":"default","tag":"Analyze","count":3},{"language":"default","tag":"Feedback","count":3},{"language":"en","tag":"How-to","count":2},{"language":"fr","tag":"Guides pratiques","count":2},{"language":"en","tag":"Reference","count":1},{"language":"en","tag":"Getting started","count":1},{"language":"fr","tag":"Référence","count":1},{"language":"fr","tag":"Pour commencer","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":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":"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":"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":"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":"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":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"en/documentation/how-to/connect-webhook","slug":"/en/documentation/how-to/connect-webhook","pageMetadata":{"title":"Connect your webhook","sidebarTitle":"Connect your webhook","description":"Register a webhook in the Bodyguard dashboard to receive notifications on your endpoint.","href":"/en/documentation/how-to/connect-webhook"},"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: \"Register a webhook in the Bodyguard dashboard to receive notifications on your endpoint.\"\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},{Card,CardGroup,Frame,Heading,Note,OptimizedImage,Step,Steps,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A webhook notifies your endpoint when events occur in Bodyguard, such as a message or an author being updated. This page walks you through registering one in the dashboard. To learn how webhooks work, see the `,_jsx(_components.a,{href:`/en/api-reference/webhooks/introduction`,children:`Webhooks introduction`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.p,{children:[`You need a public HTTPS endpoint that is ready to receive notifications. Bodyguard denies webhooks registered with an `,_jsx(_components.code,{children:`http`}),` URL. See the `,_jsx(_components.a,{href:`/en/api-reference/webhooks/quick-start`,children:`Quick start`}),` to build your endpoint and verify the signature of each request.`]}),`\n`,_jsx(Heading,{level:`2`,id:`steps`,children:`Steps`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Add a webhook`,children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click the gear icon in the left menu to open `,_jsx(_components.strong,{children:`Settings`}),`, select `,_jsx(_components.strong,{children:`Webhooks`}),`, then click `,_jsx(_components.strong,{children:`Add webhook`}),`.`]}),`\n`,_jsx(Frame,{caption:`Settings > Webhooks`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/01-open-webhooks-page.png?fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=71ad72d9f89c307321eb2981a9acf4c9`,alt:`Webhooks page with the Settings gear icon (1), the Webhooks entry (2), and the Add webhook button (3) highlighted`,\"data-og-width\":`1920`,width:`1920`,\"data-og-height\":`855`,height:`855`,\"data-path\":`images/how-to/connect-webhook/01-open-webhooks-page.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/01-open-webhooks-page.png?w=280\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=9e1386be81abc65eac41e6315bd531c3 280w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/01-open-webhooks-page.png?w=560\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=1aebf4e152705319eda256c5965aabb5 560w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/01-open-webhooks-page.png?w=840\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=263c8bb468b53e4291ec7808b9f5c6f4 840w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/01-open-webhooks-page.png?w=1100\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=0c36c229fe7c78e3f34b945ea3790d34 1100w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/01-open-webhooks-page.png?w=1650\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=69d29ae800ceede42491dabfee3cc67f 1650w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/01-open-webhooks-page.png?w=2500\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=952adeb42c1409110aa46274f9fda660 2500w`})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Fill in the form. The numbers match the screenshot below.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`1.`}),` Enter the `,_jsx(_components.strong,{children:`Endpoint URL`}),` that receives notifications. It must be publicly reachable over HTTPS.`,_jsx(`br`,{}),`\n`,_jsx(_components.strong,{children:`2.`}),` Add at least one `,_jsx(_components.strong,{children:`Alert contact`}),`. Bodyguard notifies your contacts when deliveries to this endpoint fail. Each contact must be a user registered to your organization on the dashboard.`,_jsx(`br`,{}),`\n`,_jsx(_components.strong,{children:`3.`}),` Choose the `,_jsx(_components.strong,{children:`Sources`}),` the webhook applies to. In this example, `,_jsx(_components.strong,{children:`All the organization’s API sources`}),` is selected.`,_jsx(`br`,{}),`\n`,_jsx(_components.strong,{children:`4.`}),` Select the `,_jsx(_components.strong,{children:`Events`}),` you subscribe to: `,_jsx(_components.code,{children:`message.updated`}),` (when a message is updated by Bodyguard) and `,_jsx(_components.code,{children:`author.updated`}),` (when an author is updated by Bodyguard).`,_jsx(`br`,{}),`\n`,_jsx(_components.strong,{children:`5.`}),` Click `,_jsx(_components.strong,{children:`Create webhook`}),`.`]}),`\n`,_jsx(Frame,{caption:`New webhook form`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/02-new-webhook-form.png?fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=b3c06997e442288a625613943e370d37`,alt:`New webhook dialog with the Endpoint URL (1), Alert contact (2), Sources (3), and Events (4) fields and the Create webhook button (5) highlighted`,\"data-og-width\":`1920`,width:`1920`,\"data-og-height\":`855`,height:`855`,\"data-path\":`images/how-to/connect-webhook/02-new-webhook-form.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/02-new-webhook-form.png?w=280\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=73fe7f7fdbc44335a5f68fb1d251c90d 280w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/02-new-webhook-form.png?w=560\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=284fca68ef756389eb859abe73d185bf 560w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/02-new-webhook-form.png?w=840\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=7fdd79e7c469a202d62246715b909e85 840w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/02-new-webhook-form.png?w=1100\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=8fd6878a671a9da091050779ca42595c 1100w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/02-new-webhook-form.png?w=1650\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=16321a85f8b5c6db002cea2f11d289b1 1650w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/02-new-webhook-form.png?w=2500\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=daba03d565f9808a37183d68a7fe6a33 2500w`})}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/en/api-reference/webhooks/configuration`,children:`Configuration`}),` for each field and `,_jsx(_components.a,{href:`/en/api-reference/reference/webhooks/payloads`,children:`Payloads`}),` for the content of each event.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`When you create the webhook, Bodyguard sends a `,_jsx(_components.a,{href:`/en/api-reference/reference/webhooks/payloads#webhook-validate`,children:_jsx(_components.code,{children:`webhook.validate`})}),` event to your endpoint. Your endpoint must answer it with a `,_jsx(_components.code,{children:`2xx`}),` status code.`]})}),`\n`]}),`\n`]})}),_jsxs(Step,{title:`Copy your signing secret`,children:[_jsxs(_components.p,{children:[`Bodyguard generates a signing secret when you create the webhook and displays it in the `,_jsx(_components.strong,{children:`Webhook created`}),` dialog. Copy it with the copy icon and store it somewhere safe, then click `,_jsx(_components.strong,{children:`Done`}),`. The secret starts with `,_jsx(_components.code,{children:`whsec_`}),`.`]}),_jsx(Frame,{caption:`Signing secret displayed at creation`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/03-signing-secret.png?fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=3c03ea994fe4205b5afd49160524df63`,alt:`Webhook created dialog with the signing secret field and its copy icon highlighted`,\"data-og-width\":`1920`,width:`1920`,\"data-og-height\":`855`,height:`855`,\"data-path\":`images/how-to/connect-webhook/03-signing-secret.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/03-signing-secret.png?w=280\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=aa3538f23cd1dad773e1d82ae0ec908c 280w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/03-signing-secret.png?w=560\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=d55bfe01fe100da4f2526ca7770d5bf7 560w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/03-signing-secret.png?w=840\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=f1eecba2d6b73795a9ef5f8630d112fc 840w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/03-signing-secret.png?w=1100\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=c1f0489f47a04cc6d4e5ede26f2fa4f7 1100w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/03-signing-secret.png?w=1650\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=09f8f9755d889310d2ead711f1806c70 1650w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/03-signing-secret.png?w=2500\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=5f3e38cdc4e0654413f0c4a3f31f775d 2500w`})}),_jsx(Warning,{children:_jsx(_components.p,{children:`The signing secret is shown only once. You can’t see it again after closing the dialog. Treat it like a password and never expose it in client-side code.`})}),_jsxs(_components.p,{children:[`You use the signing secret to verify that each request comes from Bodyguard. See the `,_jsx(_components.a,{href:`/en/api-reference/webhooks/quick-start`,children:`Quick start`}),`.`]})]}),_jsxs(Step,{title:`Enable and test your webhook`,children:[_jsxs(_components.p,{children:[`Your webhook is created with the `,_jsx(_components.code,{children:`Disabled`}),` status. Enable it once your endpoint is ready to receive events. Click the `,_jsx(_components.strong,{children:`⋮`}),` menu at the end of the webhook row to open its actions:`]}),_jsx(Frame,{caption:`Webhook actions menu`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/04-webhook-actions-menu.png?fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=f6f543e38882a16540b4c21afdfa074c`,alt:`Webhooks list with the three-dot button of the webhook row (1) and its actions menu highlighted, showing Send test event, Edit webhook, Enable webhook, and Delete webhook`,\"data-og-width\":`1920`,width:`1920`,\"data-og-height\":`855`,height:`855`,\"data-path\":`images/how-to/connect-webhook/04-webhook-actions-menu.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/04-webhook-actions-menu.png?w=280\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=693c87578950f9fab077bc04cbbd3b56 280w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/04-webhook-actions-menu.png?w=560\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=7b5e4498c4b2f6ef79b3289ea4dc369d 560w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/04-webhook-actions-menu.png?w=840\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=8e6829461398e6ec1c5df5c97c7d7513 840w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/04-webhook-actions-menu.png?w=1100\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=3d34033a9ab020a202644cc5221bd5cf 1100w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/04-webhook-actions-menu.png?w=1650\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=d0125daa478ac5b6800c686754b8c548 1650w, https://mintcdn.com/bodyguardai/oGCRxEeuFI_d_hrR/images/how-to/connect-webhook/04-webhook-actions-menu.png?w=2500\u0026fit=max\u0026auto=format\u0026n=oGCRxEeuFI_d_hrR\u0026q=85\u0026s=1bdbd4386b0aa6f85b1040ec4bdd121f 2500w`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Enable webhook`}),` activates the webhook.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Send test event`}),` lets you check that your endpoint receives events.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Edit webhook`}),` and `,_jsx(_components.strong,{children:`Delete webhook`}),` let you change or remove the webhook.`]}),`\n`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`While a webhook is disabled, Bodyguard doesn’t send its events, and they can’t be replayed when you enable the webhook again. See `,_jsx(_components.a,{href:`/en/api-reference/webhooks/configuration#webhook-statuses`,children:`Webhook statuses`}),`.`]})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(CardGroup,{cols:3,children:[_jsx(Card,{title:`Quick start`,icon:`rocket`,href:`/en/api-reference/webhooks/quick-start`,children:_jsx(_components.p,{children:`Build an endpoint and verify each request with a Standard Webhooks library.`})}),_jsx(Card,{title:`Configuration`,icon:`settings`,href:`/en/api-reference/webhooks/configuration`,children:_jsx(_components.p,{children:`Events, signing secret, contacts, and webhook statuses.`})}),_jsx(Card,{title:`Handling errors`,icon:`triangle-alert`,href:`/en/api-reference/webhooks/handling-errors`,children:_jsx(_components.p,{children:`What happens when your endpoint fails, and how to recover.`})})]})]})}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":"Connect your webhook","sidebarTitle":"Connect your webhook","description":"Register a webhook in the Bodyguard dashboard to receive notifications on your endpoint.","href":"/en/documentation/how-to/connect-webhook"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Steps","slug":"steps","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"bodyguardai","siteName":"Bodyguard","title":"Connect your webhook - Bodyguard","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/en/documentation/how-to/connect-webhook","matchLevel":0},"fr":{"href":"/fr/documentation/how-to/connect-webhook","matchLevel":1}}},"lastModified":"2026-11-02T16:42:06.961Z","originalFileLocation":"en/documentation/how-to/connect-webhook.mdx","locale":"en"},"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=\"light\"}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=\"Register a webhook in the Bodyguard dashboard to receive notifications on your endpoint.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Bodyguard\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/bodyguardai/E1zFw9LKjEKggkfV/_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/bodyguardai/E1zFw9LKjEKggkfV/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/bodyguardai/E1zFw9LKjEKggkfV/_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/bodyguardai/E1zFw9LKjEKggkfV/_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/bodyguardai/E1zFw9LKjEKggkfV/_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/bodyguardai/E1zFw9LKjEKggkfV/_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/bodyguardai/E1zFw9LKjEKggkfV/_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/bodyguardai/E1zFw9LKjEKggkfV/_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/bodyguardai/E1zFw9LKjEKggkfV/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Connect your webhook - Bodyguard\">\u003cmeta data-mint-head property=\"og:description\" content=\"Register a webhook in the Bodyguard dashboard to receive notifications on your endpoint.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Bodyguard\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.bodyguard.ai/en/documentation/how-to/connect-webhook\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://bodyguardai.mintlify.app/_mintlify/api/og/v2?division=How-to\u0026amp;title=Connect+your+webhook\u0026amp;description=Register+a+webhook+in+the+Bodyguard+dashboard+to+receive+notifications+on+your+endpoint.\u0026amp;theme=eb2f9429f7a5b336cace50d0\u0026amp;signature=9f61ea57209f73d6ecf1e5083b5a99def1251b18d4ef1ae53d6ca552f812b913\">\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=\"Connect your webhook - Bodyguard\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Register a webhook in the Bodyguard dashboard to receive notifications on your endpoint.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://bodyguardai.mintlify.app/_mintlify/api/og/v2?division=How-to\u0026amp;title=Connect+your+webhook\u0026amp;description=Register+a+webhook+in+the+Bodyguard+dashboard+to+receive+notifications+on+your+endpoint.\u0026amp;theme=eb2f9429f7a5b336cace50d0\u0026amp;signature=9f61ea57209f73d6ecf1e5083b5a99def1251b18d4ef1ae53d6ca552f812b913\">\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/bodyguardai/E1zFw9LKjEKggkfV/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Bodyguard\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#003c7c\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.bodyguard.ai/en/documentation/how-to/connect-webhook\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/en/documentation/how-to/connect-webhook.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.bodyguard.ai/en/documentation/how-to/connect-webhook\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr\" href=\"https://docs.bodyguard.ai/fr/documentation/how-to/connect-webhook\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.bodyguard.ai/en/documentation/how-to/connect-webhook\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.bodyguard.ai/#organization\",\"name\":\"Bodyguard\",\"url\":\"https://docs.bodyguard.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/bodyguardai/CXXaMNDOCYmwXYkN/images/logo-light.svg?fit=max\u0026auto=format\u0026n=CXXaMNDOCYmwXYkN\u0026q=85\u0026s=53fbcc63f9cb65a2b24e72faf85fcbc6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.bodyguard.ai#website\",\"name\":\"Bodyguard\",\"url\":\"https://docs.bodyguard.ai\",\"publisher\":{\"@id\":\"https://docs.bodyguard.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.bodyguard.ai/en/documentation/how-to/connect-webhook#webpage\",\"url\":\"https://docs.bodyguard.ai/en/documentation/how-to/connect-webhook\",\"name\":\"Connect your webhook\",\"description\":\"Register a webhook in the Bodyguard dashboard to receive notifications on your endpoint.\",\"dateModified\":\"2026-11-02T16:42:06.961Z\",\"isPartOf\":{\"@id\":\"https://docs.bodyguard.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.bodyguard.ai/en/documentation/how-to/connect-webhook#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.bodyguard.ai/en/documentation/how-to/connect-webhook#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"How-to\",\"item\":\"https://docs.bodyguard.ai/en/documentation/how-to/get-api-key\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Connect your webhook\",\"item\":\"https://docs.bodyguard.ai/en/documentation/how-to/connect-webhook\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.bodyguard.ai/en/documentation/how-to/connect-webhook#article\",\"headline\":\"Connect your webhook\",\"name\":\"Connect your webhook\",\"description\":\"Register a webhook in the Bodyguard dashboard to receive notifications on your endpoint.\",\"url\":\"https://docs.bodyguard.ai/en/documentation/how-to/connect-webhook\",\"mainEntityOfPage\":{\"@id\":\"https://docs.bodyguard.ai/en/documentation/how-to/connect-webhook#webpage\"},\"dateModified\":\"2026-11-02T16:42:06.961Z\",\"publisher\":{\"@id\":\"https://docs.bodyguard.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.bodyguard.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Bodyguard\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Bodyguard","nav":{"global":null,"languages":[{"language":"en","tabs":[{"tab":"Documentation","groups":[{"group":"Getting started","pages":[{"title":"Introduction","href":"/en/documentation/introduction"}]},{"group":"How-to","pages":[{"title":"Get your API key","sidebarTitle":"Get your API key","description":"Create a service account and an API key in the Bodyguard dashboard to authenticate your API requests.","href":"/en/documentation/how-to/get-api-key"},{"title":"Connect your webhook","sidebarTitle":"Connect your webhook","href":"/en/documentation/how-to/connect-webhook"}]},{"group":"Taxonomy","pages":[{"title":"Text classifications","description":"A complete reference to Bodyguard's text taxonomy: the signals we use to describe content and the classifications we detect.","href":"/en/documentation/taxonomy/text-classifications"},{"title":"Image classifications","href":"/en/documentation/taxonomy/image-classifications"},{"title":"Username classifications","href":"/en/documentation/taxonomy/username-classifications"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/en/api-reference/introduction"}]},{"tab":"Migration guide","hidden":true,"pages":[{"title":"Migration guide","href":"/en/migration-guide/overview"}]}]},{"language":"fr","pages":[{"title":"fr","href":"/fr/documentation/how-to/connect-webhook"}]}]},"basePath":"","title":"Connect your webhook - Bodyguard","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["07c022d89b","a74be98ba7","a9bb46feb3"],"chunks":["Frame-DXXFP6nH.js","DynamicMarkdown-B54_zNBF.js","zoom-image-lightbox-BG6oD64b.js","lightbox-handle-r17bVUz3.js","Markdown-DfhCTwyA.js","clsx-xpJZXxdP.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BTZUMDnx.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DqdKa2R4.js"]}