Open the recipe in the SmartBrowse studio, fill in the Webhook URL field, and (optionally) add custom request headers — for example an Authorization header your endpoint checks on receipt.You can also limit which events fire by listing them in the recipe config. Leave the list empty to receive everything.
We don’t sign deliveries yet, so the burden’s on your handler to confirm the request really came from us. Two ways to do it:
Use a hard-to-guess URL with a random path segment your endpoint expects (/webhooks/wsg/8x4Kpz...).
Add a custom header — Authorization: Bearer <your-token> or anything you want — to the recipe’s webhook config, and check it on every request.
Pick one or both. Either way, verification stays in your handler.
Until we ship signed deliveries, treat the body as untrusted until you’ve validated the URL secret or header. Don’t act on run_id from an unauthenticated POST.
Every terminal event gets exactly one attempt — no automatic retries. We give your handler 10 seconds before we give up, and anything that returns a non-2xx is logged on our side but never redelivered. Treat it as fire-and-forget.If push delivery is critical to you, treat the webhook as a hint and fall back to polling GET /v1/smartbrowse/runs/{id} on a long interval (every few minutes) to pick up anything you missed.
Point ngrok or webhook.site at a handler to expose it to the public internet. Trigger a run from the dashboard and watch the delivery land.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"webscrape.ai","description":"Fetch pages and return structured JSON, HTML, markdown, or replayed browser output.","colors":{"primary":"#f27b2c","light":"#f27b2c","dark":"#f27b2c"},"logo":{"light":"https://mintcdn.com/webscrapeai/ePoN8H5CXXUgyfoK/logo/light.svg?fit=max\u0026auto=format\u0026n=ePoN8H5CXXUgyfoK\u0026q=85\u0026s=d2a150ff3a0eab538f70815685c3129b","dark":"https://mintcdn.com/webscrapeai/OItnfylQRhpmKYVI/logo/dark.svg?fit=max\u0026auto=format\u0026n=OItnfylQRhpmKYVI\u0026q=85\u0026s=d17c859281cdbddbe3852aa8aed3ba0e","href":"https://webscrape.ai"},"favicon":"https://mintcdn.com/webscrapeai/J4HnX7V9B1a7VXr9/favicon.ico?fit=max\u0026auto=format\u0026n=J4HnX7V9B1a7VXr9\u0026q=85\u0026s=1039f6096d1386872339b2c9604640fe","api":{"mdx":{"auth":{"method":"key","name":"X-API-Key"},"server":"https://api.webscrape.ai/v1"}},"appearance":{"default":"dark","strict":true},"background":{"decoration":"grid","color":{"dark":"#0a0a0a"}},"navbar":{"links":[{"icon":"github","href":"https://github.com/webscrape-ai","label":"github.com/webscrape-ai"}],"primary":{"type":"button","label":"Dashboard","href":"https://webscrape.ai/app"}},"footer":{"socials":{"github":"https://github.com/webscrape-ai"},"links":[{"header":"Product","items":[{"label":"Pricing","href":"https://webscrape.ai/pricing"},{"label":"Playground","href":"https://webscrape.ai/playground"},{"label":"Dashboard","href":"https://webscrape.ai/app"}]},{"header":"Resources","items":[{"label":"GitHub","href":"https://github.com/webscrape-ai"},{"label":"Hugging Face","href":"https://huggingface.co/Webscrape-AI"},{"label":"Email support","href":"mailto:hello@webscrape.ai"}]}]},"seo":{"indexing":"all"},"fonts":{"family":"Geist","weight":500,"format":"woff2"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"interaction":{"drilldown":false},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"webscrapeai","hasAudioNarration":false,"actualSubdomain":"webscrapeai","customDomains":["webscrape.ai"],"gitSource":{"type":"github","owner":"webscrape-ai","repo":"docs","deployBranch":"main","isPrivate":false,"contentDirectory":"","mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21dde71f92707db5b702d0","collectionId":"c2a6df67-dbce-4309-a5e4-b88c4baeb90d","schemaVersion":"v2"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae956caa79c9948d24b79fa:success","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Documentation","count":13},{"language":"default","tag":"API Reference","count":10},{"language":"default","tag":"Concepts","count":7},{"language":"default","tag":"SmartBrowse","count":5},{"language":"default","tag":"Scrape","count":4},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Features","count":3},{"language":"default","tag":"Overview","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","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":"vite-origin","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},{"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":true},"customCss":[{"filePath":"style.css","href":"/docs/_mintlify/custom/webscrapeai/3acb135554eb193e/style.css"}],"page":{"pagePath":"concepts/webhooks","slug":"/concepts/webhooks","pageMetadata":{"title":"Webhooks","description":"Push delivery for SmartBrowse run lifecycle events.","href":"/concepts/webhooks"},"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: \"Push delivery for SmartBrowse run lifecycle events.\"\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`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Add a delivery URL to a SmartBrowse recipe and we’ll `,_jsx(_components.code,{children:`POST`}),` to it when a run finishes. Webhooks let you skip the poll loop entirely.`]}),`\n`,_jsx(Heading,{level:`2`,id:`configure-a-webhook`,children:`Configure a webhook`}),`\n`,_jsxs(_components.p,{children:[`Open the recipe in the `,_jsx(_components.a,{href:`https://webscrape.ai/app/smartbrowse`,children:`SmartBrowse studio`}),`, fill in the `,_jsx(_components.strong,{children:`Webhook URL`}),` field, and (optionally) add custom request headers — for example an `,_jsx(_components.code,{children:`Authorization`}),` header your endpoint checks on receipt.`]}),`\n`,_jsx(_components.p,{children:`You can also limit which events fire by listing them in the recipe config. Leave the list empty to receive everything.`}),`\n`,_jsx(Heading,{level:`2`,id:`event-names`,children:`Event names`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`event`}),` is one of:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Event`}),_jsx(_components.th,{children:`When`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`completed`})}),_jsx(_components.td,{children:`Run finished and items came back.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`failed`})}),_jsx(_components.td,{children:`Run errored out.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cancelled`})}),_jsx(_components.td,{children:`Run was force-stopped (e.g. an account deletion confirmed mid-run).`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`payload-shape`,children:`Payload shape`}),`\n`,_jsxs(_components.p,{children:[`Each delivery is a `,_jsx(_components.code,{children:`POST`}),` with `,_jsx(_components.code,{children:`Content-Type: application/json`}),` and a flat JSON body — `,_jsx(_components.strong,{children:`not`}),` the API envelope. Shape:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`14`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"completed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"timestamp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-05-21T17:04:12Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"run_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"k7Xb9dRmQ2p\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"recipe_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"m3Yc2tFvN8q\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"completed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"pages_extracted\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"items_extracted\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`87`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"credits_used\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"mode\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"replay\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"drift\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0.02`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"warnings\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`failed`}),` and `,_jsx(_components.code,{children:`cancelled`}),` deliveries use the same shape, with `,_jsx(_components.code,{children:`status`}),` set accordingly and `,_jsx(_components.code,{children:`error`}),` populated:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`14`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"event\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"failed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"timestamp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-05-21T17:10:00Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"run_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"p9Lk3vWqR7s\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"recipe_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"m3Yc2tFvN8q\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"failed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"pages_extracted\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"items_extracted\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"credits_used\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"mode\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"drift\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"warnings\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"target page did not load within timeout\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`authenticating-deliveries`,children:`Authenticating deliveries`}),`\n`,_jsx(_components.p,{children:`We don’t sign deliveries yet, so the burden’s on your handler to confirm the request really came from us. Two ways to do it:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use a hard-to-guess URL with a random path segment your endpoint expects (`,_jsx(_components.code,{children:`/webhooks/wsg/8x4Kpz...`}),`).`]}),`\n`,_jsxs(_components.li,{children:[`Add a custom header — `,_jsx(_components.code,{children:`Authorization: Bearer \u003cyour-token>`}),` or anything you want — to the recipe’s webhook config, and check it on every request.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Pick one or both. Either way, verification stays in your handler.`}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Until we ship signed deliveries, treat the body as untrusted until you’ve validated the URL secret or header. Don’t act on `,_jsx(_components.code,{children:`run_id`}),` from an unauthenticated POST.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`delivery-semantics`,children:`Delivery semantics`}),`\n`,_jsx(_components.p,{children:`Every terminal event gets exactly one attempt — no automatic retries. We give your handler 10 seconds before we give up, and anything that returns a non-2xx is logged on our side but never redelivered. Treat it as fire-and-forget.`}),`\n`,_jsxs(_components.p,{children:[`If push delivery is critical to you, treat the webhook as a hint and fall back to polling `,_jsx(_components.code,{children:`GET /v1/smartbrowse/runs/{id}`}),` on a long interval (every few minutes) to pick up anything you missed.`]}),`\n`,_jsx(Heading,{level:`2`,id:`testing-locally`,children:`Testing locally`}),`\n`,_jsxs(_components.p,{children:[`Point `,_jsx(_components.a,{href:`https://ngrok.com`,children:`ngrok`}),` or `,_jsx(_components.a,{href:`https://webhook.site`,children:`webhook.site`}),` at a handler to expose it to the public internet. Trigger a run from the dashboard and watch the delivery land.`]})]})}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":"Webhooks","description":"Push delivery for SmartBrowse run lifecycle events.","href":"/concepts/webhooks"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Configure a webhook","slug":"configure-a-webhook","depth":2,"children":[]},{"title":"Event names","slug":"event-names","depth":2,"children":[]},{"title":"Payload shape","slug":"payload-shape","depth":2,"children":[]},{"title":"Authenticating deliveries","slug":"authenticating-deliveries","depth":2,"children":[]},{"title":"Delivery semantics","slug":"delivery-semantics","depth":2,"children":[]},{"title":"Testing locally","slug":"testing-locally","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"webscrapeai","siteName":"webscrape.ai","title":"Webhooks - webscrape.ai","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-05-21T19:37:01.836Z","originalFileLocation":"concepts/webhooks.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"dark\";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=\"dark\"}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=\"Push delivery for SmartBrowse run lifecycle events.\">\u003cmeta data-mint-head name=\"application-name\" content=\"webscrape.ai\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/webscrapeai/LEHnMviy41jOheI7/_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=\"/docs/mintlify-assets/_mintlify/favicons/webscrapeai/LEHnMviy41jOheI7/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/webscrapeai/LEHnMviy41jOheI7/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/webscrapeai/LEHnMviy41jOheI7/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/webscrapeai/LEHnMviy41jOheI7/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/webscrapeai/LEHnMviy41jOheI7/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/webscrapeai/LEHnMviy41jOheI7/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/webscrapeai/LEHnMviy41jOheI7/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/webscrapeai/LEHnMviy41jOheI7/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Webhooks - webscrape.ai\">\u003cmeta data-mint-head property=\"og:description\" content=\"Push delivery for SmartBrowse run lifecycle events.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"webscrape.ai\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://webscrape.ai/docs/concepts/webhooks\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://webscrapeai.mintlify.site/docs/_mintlify/api/og/v2?division=Concepts\u0026amp;title=Webhooks\u0026amp;description=Push+delivery+for+SmartBrowse+run+lifecycle+events.\u0026amp;theme=ec75218842615f24e4c16d9a\u0026amp;signature=c38f9b393d590a46cf7ae97b751c8e72a312817b417dea521b9086887e36e95e\">\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=\"Webhooks - webscrape.ai\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Push delivery for SmartBrowse run lifecycle events.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://webscrapeai.mintlify.site/docs/_mintlify/api/og/v2?division=Concepts\u0026amp;title=Webhooks\u0026amp;description=Push+delivery+for+SmartBrowse+run+lifecycle+events.\u0026amp;theme=ec75218842615f24e4c16d9a\u0026amp;signature=c38f9b393d590a46cf7ae97b751c8e72a312817b417dea521b9086887e36e95e\">\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=\"/docs/mintlify-assets/_mintlify/favicons/webscrapeai/LEHnMviy41jOheI7/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"webscrape.ai\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#f27b2c\">\u003clink data-mint-head rel=\"canonical\" href=\"https://webscrape.ai/docs/concepts/webhooks\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/concepts/webhooks.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://webscrape.ai/#organization\",\"name\":\"webscrape.ai\",\"url\":\"https://webscrape.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/webscrapeai/ePoN8H5CXXUgyfoK/logo/light.svg?fit=max\u0026auto=format\u0026n=ePoN8H5CXXUgyfoK\u0026q=85\u0026s=d2a150ff3a0eab538f70815685c3129b\"}},{\"@type\":\"WebSite\",\"@id\":\"https://webscrape.ai/docs#website\",\"name\":\"webscrape.ai\",\"url\":\"https://webscrape.ai/docs\",\"publisher\":{\"@id\":\"https://webscrape.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://webscrape.ai/docs/concepts/webhooks#webpage\",\"url\":\"https://webscrape.ai/docs/concepts/webhooks\",\"name\":\"Webhooks\",\"description\":\"Push delivery for SmartBrowse run lifecycle events.\",\"dateModified\":\"2026-05-21T19:37:01.836Z\",\"isPartOf\":{\"@id\":\"https://webscrape.ai/docs#website\"},\"breadcrumb\":{\"@id\":\"https://webscrape.ai/docs/concepts/webhooks#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://webscrape.ai/docs/concepts/webhooks#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Concepts\",\"item\":\"https://webscrape.ai/docs/concepts/authentication\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Webhooks\",\"item\":\"https://webscrape.ai/docs/concepts/webhooks\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://webscrape.ai/docs/concepts/webhooks#article\",\"headline\":\"Webhooks\",\"name\":\"Webhooks\",\"description\":\"Push delivery for SmartBrowse run lifecycle events.\",\"url\":\"https://webscrape.ai/docs/concepts/webhooks\",\"mainEntityOfPage\":{\"@id\":\"https://webscrape.ai/docs/concepts/webhooks#webpage\"},\"dateModified\":\"2026-05-21T19:37:01.836Z\",\"publisher\":{\"@id\":\"https://webscrape.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://webscrape.ai/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"webscrape.ai\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"webscrape.ai","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Get started","pages":[{"title":"Introduction","href":""},{"title":"Quickstart","href":"/quickstart"},{"title":"Build with AI","href":"/build-with-ai"}]},{"group":"Features","pages":[{"title":"SmartScraper","href":"/features/smartscraper"},{"title":"Scrape","href":"/features/scrape"},{"title":"SmartBrowse","href":"/features/smartbrowse"}]},{"group":"Concepts","pages":[{"title":"Authentication","href":"/concepts/authentication"},{"title":"Pick the right product","href":"/concepts/products"},{"title":"Credits \u0026 pricing","href":"/concepts/credits"},{"title":"Stealth mode","description":"When to set stealth: true, how it works, and what it costs.","href":"/concepts/stealth-mode"},{"title":"Webhooks","href":"/concepts/webhooks"},{"title":"Errors","description":"HTTP status codes, the error envelope shape, stable error codes, and how to handle them.","href":"/concepts/errors"},{"title":"Rate limits","href":"/concepts/rate-limits"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"Webhooks - webscrape.ai","buildId":"dpl_CEsowfH15TDzsBT2BFbX312Be4Ct","deploymentId":"dpl_CEsowfH15TDzsBT2BFbX312Be4Ct","dynamics":[],"chunks":[]}