The webhook target URL must always respond with a 2xx HTTP status code.The status code only confirms that the webhook was received. Do not use HTTP error codes to report business logic errors.
The target URL should respond fast. Aim for a response time of less than 500 ms; up to one second is acceptable occasionally. These are recommendations, not enforced limits.
HUB2 waits at most 5 seconds for a response. A slower response counts as a failed delivery and the event is retried, which can eventually disable the webhook (see Behavior).
Simple mechanisms help you meet these response times.
In particular, verify the signature, hand the webhook over to asynchronous processing (an event queue, for example) and respond with a 2xx code immediately.JavaScript example:
function onPaymentIntentCreatedWebhookReceived(req, res) { verifyHub2WebhookSignature(req); // throws if the signature is invalid enqueuePaymentIntentCreated(req.body); // processed asynchronously, not awaited res.status(200).end(); // respond with 2xx right away}
If a single webhook is registered with all events, its deactivation stops the delivery of all of them.To avoid this, register one event per webhook: if one webhook is disabled, the others keep working.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"HUB2 Documentation","colors":{"primary":"#0D9373","light":"#07C983","dark":"#0D9373"},"logo":{"light":"https://mintcdn.com/hub2-83/aPkTvmVeXN9HXpuW/assets/logo/hub2.png?fit=max\u0026auto=format\u0026n=aPkTvmVeXN9HXpuW\u0026q=85\u0026s=18f9f70abbe4d6234bad47152927237a","dark":"https://mintcdn.com/hub2-83/aPkTvmVeXN9HXpuW/assets/logo/hub2.png?fit=max\u0026auto=format\u0026n=aPkTvmVeXN9HXpuW\u0026q=85\u0026s=18f9f70abbe4d6234bad47152927237a"},"favicon":"https://mintcdn.com/hub2-83/aPkTvmVeXN9HXpuW/assets/favicon.png?fit=max\u0026auto=format\u0026n=aPkTvmVeXN9HXpuW\u0026q=85\u0026s=d71426a9f8f85b6c6ccce6d36247bf39","api":{"openapi":"https://api.hub2.io/docs-json"},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/hub2","website":"https://www.hub2.io"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"hub2-83","hasAudioNarration":false,"actualSubdomain":"hub2-83","customDomains":["docs.hub2.io"],"gitSource":{"type":"github","owner":"technohub2","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"entitlements":{},"buildId":"6ae16defdd9644647b4200dd","clientVersion":"0.0.4087","searchFilterCounts":[{"language":"default","tag":"Référence de l'API","count":86},{"language":"default","tag":"Integration","count":44},{"language":"default","tag":"Intégration","count":44},{"language":"default","tag":"Payments","count":18},{"language":"default","tag":"Webhooks","count":17},{"language":"default","tag":"Documentation","count":16},{"language":"default","tag":"Transfers","count":11},{"language":"default","tag":"Compliance","count":10},{"language":"default","tag":"Payment Links","count":10},{"language":"default","tag":"Processing Only","count":10}]},"assistantConfig":{},"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":[{"filePath":"assets/style.css","content":"table{display:table!important}.table-scroll{overflow:scroll}table tbody tr:nth-child(odd){background:#FAFAFA}html.dark table tbody tr:nth-child(odd){background:#1A1A1A}"}],"page":{"pagePath":"integration/en/webhooks/webhooks_bestpractices","slug":"/integration/en/webhooks/webhooks_bestpractices","pageMetadata":{"title":"Best practices","description":null,"href":"/integration/en/webhooks/webhooks_bestpractices"},"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`,em:`em`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Note,{children:_jsx(_components.p,{children:_jsx(_components.strong,{children:`Apply these recommendations before going live.`})})}),`\n`,_jsx(Heading,{level:`2`,id:`http-code-2xx`,children:`HTTP code 2xx`}),`\n`,_jsxs(_components.p,{children:[`The webhook target URL must `,_jsx(_components.strong,{children:`always`}),` respond with a 2xx HTTP status code.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.em,{children:`The status code only confirms that the webhook was received. Do not use HTTP error codes to report business logic errors.`})}),`\n`,_jsx(Heading,{level:`2`,id:`response-times`,children:`Response times`}),`\n`,_jsxs(_components.p,{children:[`The target URL should respond `,_jsx(_components.strong,{children:`fast`}),`. Aim for a response time of `,_jsx(_components.strong,{children:`less than 500 ms`}),`; up to one second is acceptable occasionally. These are recommendations, not enforced limits.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`HUB2 waits `,_jsx(_components.strong,{children:`at most 5 seconds`}),` for a response. A slower response counts as a failed delivery and the event is retried, which can eventually disable the webhook (see `,_jsx(_components.a,{href:`/integration/en/webhooks/webhooks_behavior`,children:`Behavior`}),`).`]})}),`\n`,_jsx(Heading,{level:`2`,id:`asynchronous-handling`,children:`Asynchronous handling`}),`\n`,_jsx(_components.p,{children:`Simple mechanisms help you meet these response times.\nIn particular, verify the signature, hand the webhook over to asynchronous processing (an event queue, for example) and respond with a 2xx code immediately.`}),`\n`,_jsx(_components.p,{children:`JavaScript example:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`javascript`,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:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` onPaymentIntentCreatedWebhookReceived`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`req`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` verifyHub2WebhookSignature`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`req`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// throws if the signature is invalid`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` enqueuePaymentIntentCreated`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`req`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`body`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// processed asynchronously, not awaited`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`status`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`200`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`end`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(); `}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// respond with 2xx right away`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`split-events-across-several-webhooks`,children:`Split events across several webhooks`}),`\n`,_jsx(_components.p,{children:`If a single webhook is registered with all events, its deactivation stops the delivery of all of them.`}),`\n`,_jsx(_components.p,{children:`To avoid this, register one event per webhook: if one webhook is disabled, the others keep working.`})]})}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":"Best practices","description":null,"href":"/integration/en/webhooks/webhooks_bestpractices"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"HTTP code 2xx","slug":"http-code-2xx","depth":2,"children":[]},{"title":"Response times","slug":"response-times","depth":2,"children":[]},{"title":"Asynchronous handling","slug":"asynchronous-handling","depth":2,"children":[]},{"title":"Split events across several webhooks","slug":"split-events-across-several-webhooks","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/hub2-83/0ef60d836fa10d10/assets/mermaid.js"],"subdomain":"hub2-83","siteName":"HUB2 Documentation","title":"Best practices - HUB2 Documentation","navMaps":{"firstHrefInVersion":{"English":{"href":"/integration/en/webhooks/webhooks_bestpractices","matchLevel":0},"Français":{"href":"/integration/fr/webhooks/webhooks_bestpractices","matchLevel":1}},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T03:37:31.611Z","originalFileLocation":"integration/en/webhooks/webhooks_bestpractices.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=\"application-name\" content=\"HUB2 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/hub2-83/2cSAgZof76cJIDy-/_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/hub2-83/2cSAgZof76cJIDy-/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/hub2-83/2cSAgZof76cJIDy-/_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/hub2-83/2cSAgZof76cJIDy-/_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/hub2-83/2cSAgZof76cJIDy-/_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/hub2-83/2cSAgZof76cJIDy-/_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/hub2-83/2cSAgZof76cJIDy-/_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/hub2-83/2cSAgZof76cJIDy-/_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/hub2-83/2cSAgZof76cJIDy-/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Best practices - HUB2 Documentation\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"HUB2 Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.hub2.io/integration/en/webhooks/webhooks_bestpractices\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://hub2-83.mintlify.site/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=Best+practices\u0026amp;theme=92cb3d561e9d2318e8ed5cd1\u0026amp;signature=8a938dadba4c93fd35752295b8272adb03d18b874110a1b9c112a3f1815d8717\">\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=\"Best practices - HUB2 Documentation\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://hub2-83.mintlify.site/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=Best+practices\u0026amp;theme=92cb3d561e9d2318e8ed5cd1\u0026amp;signature=8a938dadba4c93fd35752295b8272adb03d18b874110a1b9c112a3f1815d8717\">\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/hub2-83/2cSAgZof76cJIDy-/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"HUB2 Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0D9373\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.hub2.io/integration/en/webhooks/webhooks_bestpractices\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integration/en/webhooks/webhooks_bestpractices.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.hub2.io/#organization\",\"name\":\"HUB2 Documentation\",\"url\":\"https://docs.hub2.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/hub2-83/aPkTvmVeXN9HXpuW/assets/logo/hub2.png?fit=max\u0026auto=format\u0026n=aPkTvmVeXN9HXpuW\u0026q=85\u0026s=18f9f70abbe4d6234bad47152927237a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.hub2.io#website\",\"name\":\"HUB2 Documentation\",\"url\":\"https://docs.hub2.io\",\"publisher\":{\"@id\":\"https://docs.hub2.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.hub2.io/integration/en/webhooks/webhooks_bestpractices#webpage\",\"url\":\"https://docs.hub2.io/integration/en/webhooks/webhooks_bestpractices\",\"name\":\"Best practices\",\"dateModified\":\"2026-10-28T03:37:31.611Z\",\"isPartOf\":{\"@id\":\"https://docs.hub2.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.hub2.io/integration/en/webhooks/webhooks_bestpractices#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.hub2.io/integration/en/webhooks/webhooks_bestpractices#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Webhooks\",\"item\":\"https://docs.hub2.io/integration/en/webhooks/webhooks_overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Best practices\",\"item\":\"https://docs.hub2.io/integration/en/webhooks/webhooks_bestpractices\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.hub2.io/integration/en/webhooks/webhooks_bestpractices#article\",\"headline\":\"Best practices\",\"name\":\"Best practices\",\"url\":\"https://docs.hub2.io/integration/en/webhooks/webhooks_bestpractices\",\"mainEntityOfPage\":{\"@id\":\"https://docs.hub2.io/integration/en/webhooks/webhooks_bestpractices#webpage\"},\"dateModified\":\"2026-10-28T03:37:31.611Z\",\"publisher\":{\"@id\":\"https://docs.hub2.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.hub2.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"HUB2 Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"HUB2 Documentation","nav":{"global":null,"versions":[{"version":"English","tabs":[{"tab":"HUB2"},{"tab":"Integration","groups":[{"group":"Getting started","pages":[{"title":"Introduction","href":"/integration/en/getting_started/introduction"},{"title":"API Operation","href":"/integration/en/getting_started/api_operation"},{"title":"Security","href":"/integration/en/getting_started/security_considerations"},{"title":"Understand errors","href":"/integration/en/getting_started/understand_errors"},{"title":"API keys","href":"/integration/en/getting_started/api_keys"}]},{"group":"Transfers","pages":[{"title":"Introduction","href":"/integration/en/transfers/transfers_introduction"},{"title":"Integration","href":"/integration/en/transfers/transfers_integration"},{"title":"Failure causes","href":"/integration/en/transfers/transfers_failure_causes"},{"title":"MSISDN - Blacklist","href":"/integration/en/transfers/transfers_msisdn_blacklist"},{"title":"Sandbox MSISDN","href":"/integration/en/transfers/transfers_sandbox_msisdn"}]},{"group":"Payments","pages":[{"title":"Introduction","href":"/integration/en/payments/payments_introduction"},{"title":"Integration","href":"/integration/en/payments/payments_integration"},{"title":"Authentication","href":"/integration/en/payments/payments_authentication"},{"title":"List payments","href":"/integration/en/payments/payments_list"},{"title":"Object samples","href":"/integration/en/payments/payments_examples"},{"title":"Failure causes","href":"/integration/en/payments/payments_failure_causes"},{"title":"Sandbox MSISDN","href":"/integration/en/payments/payments_sandbox_msisdn"}]},{"group":"Instant Payment","pages":[{"title":"Introduction","href":"/integration/en/instant_payment/instant_payment_introduction"},{"title":"Integration","href":"/integration/en/instant_payment/instant_payment_integration"}]},{"group":"Webhooks","pages":[{"title":"Introduction","href":"/integration/en/webhooks/webhooks_overview"},{"title":"Integration","href":"/integration/en/webhooks/webhooks_integration"},{"title":"List of available events","href":"/integration/en/webhooks/webhooks_events_list"},{"title":"Webhooks behavior","description":null,"href":"/integration/en/webhooks/webhooks_behavior"},{"title":"Best practices","href":"/integration/en/webhooks/webhooks_bestpractices"},{"title":"Samples","description":null,"href":"/integration/en/webhooks/webhooks_examples"}]},{"group":"Processing Only","pages":[{"title":"Introduction","href":"/integration/en/processing_only/processing_only_introduction"},{"title":"Setup","href":"/integration/en/processing_only/processing_only_setup"},{"title":"Integration","href":"/integration/en/processing_only/processing_only_integration"}]},{"group":"Payment Links","pages":[{"title":"Introduction","href":"/integration/en/payment_links/payment-links_introduction"},{"title":"Configuration","href":"/integration/en/payment_links/payment-links_setup"},{"title":"Integration","href":"/integration/en/payment_links/payment-links_integration"}]},{"group":"Subscriptions","pages":[{"title":"Introduction","href":"/integration/en/subscriptions/subscriptions_introduction"},{"title":"Integration","href":"/integration/en/subscriptions/subscriptions_integration"}]},{"group":"Submerchants","pages":[{"title":"Introduction","href":"/integration/en/submerchants/submerchants_introduction"},{"title":"Configuration","href":"/integration/en/submerchants/submerchants_setup"},{"title":"Integration","href":"/integration/en/submerchants/submerchants_integration"}]},{"group":"Other","pages":[{"title":"Balances","href":"/integration/en/other_products/balances"},{"title":"Refunds","href":"/integration/en/other_products/refunds"},{"title":"Account Provisioning","href":"/integration/en/other_products/provisioning"},{"title":"Settlement requests","href":"/integration/en/other_products/settlement_requests"},{"title":"Public data","href":"/integration/en/other_products/public_data"},{"title":"Bank collection","href":"/integration/en/other_products/bank_collection"},{"title":"Recipients","href":"/integration/en/other_products/recipients"},{"title":"Payload signature","href":"/integration/en/other_products/payload_signature"}]}]},{"tab":"Documentation","pages":[{"title":"Documentation","href":"/documentation/en/glossary"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/data/get-countries"}]}]},{"version":"Français","pages":[{"title":"Français","href":"/integration/fr/webhooks/webhooks_bestpractices"}]}]},"basePath":"","title":"Best practices - HUB2 Documentation","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":[],"chunks":[]}