Verifique se cada requisição de webhook realmente veio do Firecrawl conferindo sua assinatura HMAC-SHA256. Isso impede que invasores falsifiquem payloads e permite que você confie nos dados antes de agir com base neles.
Seu segredo de webhook está disponível na aba Advanced das configurações da sua conta. Cada conta tem um segredo exclusivo usado para assinar todas as solicitações de webhook.
Mantenha seu segredo de webhook em segurança e nunca o exponha publicamente. Se você acreditar que seu segredo foi comprometido, gere um novo imediatamente nas configurações da sua conta.
Verifique cada requisição. Sempre verifique a assinatura antes de processar um payload de webhook. Rejeite qualquer requisição que falhe na verificação com status 401.
Use comparações seguras a timing. Comparações padrão de strings podem revelar informações por tempo de execução. Use crypto.timingSafeEqual() no Node.js ou hmac.compare_digest() no Python.
Disponibilize seu endpoint via HTTPS. Isso garante que os payloads de webhook sejam criptografados em trânsito.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Firecrawl Docs","colors":{"primary":"#000","light":"#fff","dark":"#000"},"logo":{"light":"https://mintcdn.com/firecrawl/iilnMwCX-8eR1yOO/logo/logo.png?fit=max\u0026auto=format\u0026n=iilnMwCX-8eR1yOO\u0026q=85\u0026s=c45b3c967c19a39190e76fe8e9c2ed5a","dark":"https://mintcdn.com/firecrawl/iilnMwCX-8eR1yOO/logo/logo-dark.png?fit=max\u0026auto=format\u0026n=iilnMwCX-8eR1yOO\u0026q=85\u0026s=3fee4abe033bd3c26e8ad92043a91c17","href":"https://firecrawl.dev"},"favicon":"https://mintcdn.com/firecrawl/vlKm1oZYK3oSRVTM/favicon.ico?fit=max\u0026auto=format\u0026n=vlKm1oZYK3oSRVTM\u0026q=85\u0026s=cd95e713995e71b79a2e393957f6f661","navbar":{"links":[{"href":"https://firecrawl.betteruptime.com","label":"Status"},{"href":"mailto:help@firecrawl.com","label":"Support"},{"href":"https://www.firecrawl.dev/signin?utm_source=firecrawl_docs\u0026utm_medium=nav_bar\u0026utm_content=sign_up","label":"Sign Up"}],"primary":{"type":"github","href":"https://github.com/firecrawl/firecrawl"}},"footer":{"socials":{"github":"https://github.com/firecrawl/firecrawl","linkedin":"https://www.linkedin.com/company/firecrawl","website":"https://community.firecrawl.dev/","x":"https://x.com/firecrawl"},"links":[{"header":"For AI agents","items":[{"label":"Get credentials","href":"https://docs.firecrawl.dev/ai-onboarding"},{"label":"Agent onboarding (SKILL.md)","href":"https://www.firecrawl.dev/agent-onboarding/SKILL.md"},{"label":"Agent auth (auth.md)","href":"https://www.firecrawl.dev/auth.md"},{"label":"Agent docs (llms.txt)","href":"https://docs.firecrawl.dev/llms.txt"},{"label":"Full docs (llms-full.txt)","href":"https://docs.firecrawl.dev/llms-full.txt"},{"label":"MCP server","href":"https://docs.firecrawl.dev/mcp-server"}]}]},"seo":{"metatags":{"google-site-verification":"Y83UZz1dXMKuT59lnLY_7umo6LJorqIwuP_2rFX6_eE"}},"integrations":{"ga4":{"measurementId":"G-JZJ1L5MYR1"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"languages":[{"language":"en","href":"introduction"},{"language":"es","href":"es/introduction"},{"language":"fr","href":"fr/introduction"},{"language":"ja","href":"ja/introduction"},{"language":"pt-BR","href":"pt-BR/introduction"},{"language":"zh","href":"zh/introduction"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"firecrawl","hasAudioNarration":false,"actualSubdomain":"firecrawl","customDomains":["docs.firecrawl.dev"],"gitSource":{"type":"github","owner":"firecrawl","repo":"firecrawl-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae12a258bb8cf8e1d686559","collectionId":"f8596ed1-2723-4581-9a31-50a5cee38a06","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae12a258bb8cf8e1d686559"},"feedback":{"thumbs":false,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae12a258bb8cf8e1d686559","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"en","tag":"Documentation","count":116},{"language":"es","tag":"Documentación","count":115},{"language":"fr","tag":"Documentation","count":115},{"language":"ja","tag":"ドキュメント","count":115},{"language":"pt-BR","tag":"Documentação","count":115},{"language":"zh","tag":"文档","count":115},{"language":"en","tag":"API Reference","count":68},{"language":"es","tag":"Referencia de la API","count":66},{"language":"fr","tag":"Référence de l’API","count":66},{"language":"ja","tag":"APIリファレンス","count":66},{"language":"pt-BR","tag":"Referência da API","count":66},{"language":"zh","tag":"API 参考","count":66},{"language":"en","tag":"Build with AI","count":58},{"language":"es","tag":"Crear con IA","count":58},{"language":"fr","tag":"Créer avec l’IA","count":58},{"language":"pt-BR","tag":"Desenvolva com IA","count":58},{"language":"zh","tag":"使用 AI 构建","count":58},{"language":"ja","tag":"AIで構築","count":56},{"language":"en","tag":"Quickstarts","count":33},{"language":"es","tag":"Inicios rápidos","count":33},{"language":"fr","tag":"Démarrages rapides","count":33},{"language":"ja","tag":"クイックスタート","count":33},{"language":"pt-BR","tag":"Guias de início rápido","count":33},{"language":"zh","tag":"快速入门","count":33},{"language":"en","tag":"Agent Harnesses","count":32},{"language":"es","tag":"Entornos de agentes","count":32},{"language":"fr","tag":"Intégrations pour agent","count":32},{"language":"ja","tag":"エージェントハーネス","count":32},{"language":"pt-BR","tag":"Integrações com agentes","count":32},{"language":"zh","tag":"代理工具","count":32},{"language":"en","tag":"Developer Guides","count":22},{"language":"es","tag":"Guías para desarrolladores","count":22},{"language":"fr","tag":"Guides développeur","count":22},{"language":"ja","tag":"開発者ガイド","count":22},{"language":"pt-BR","tag":"Guias para desenvolvedores","count":22},{"language":"zh","tag":"开发者指南","count":22},{"language":"en","tag":"Platforms and frameworks","count":19},{"language":"es","tag":"Plataformas y frameworks","count":19},{"language":"fr","tag":"Plateformes et frameworks","count":19},{"language":"ja","tag":"プラットフォームとフレームワーク","count":19},{"language":"pt-BR","tag":"Plataformas e frameworks","count":19},{"language":"zh","tag":"平台与框架","count":19},{"language":"es","tag":"Primeros pasos","count":16},{"language":"ja","tag":"はじめに","count":16},{"language":"pt-BR","tag":"Primeiros passos","count":16},{"language":"en","tag":"Get Started","count":14},{"language":"en","tag":"Webhook Payloads","count":13},{"language":"en","tag":"Core Endpoints","count":13},{"language":"es","tag":"Cargas útiles de webhook","count":13},{"language":"es","tag":"Endpoints principales","count":13},{"language":"fr","tag":"Démarrage rapide","count":13},{"language":"fr","tag":"Charges utiles de webhook","count":13},{"language":"fr","tag":"Points de terminaison de base","count":13},{"language":"ja","tag":"webhook ペイロード","count":13},{"language":"ja","tag":"主要エンドポイント","count":13},{"language":"pt-BR","tag":"Payloads de webhook","count":13},{"language":"pt-BR","tag":"Endpoints principais","count":13},{"language":"zh","tag":"快速开始","count":13},{"language":"zh","tag":"Webhook 负载","count":13},{"language":"zh","tag":"核心端点","count":13}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instinct-self-updating-docs","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".dark .firecrawl-cta-btn-primary:hover,.dark li.navbar-link a[href*=\"firecrawl.dev/signin\"]:hover,li.navbar-link a[href*=\"firecrawl.dev/signin\"]:hover{background-color:#e64500}.dark li.navbar-link a[href*=\"firecrawl.dev/signin\"],li.navbar-link a[href*=\"firecrawl.dev/signin\"]{background-color:#ff4d00;color:#fff}li.navbar-link:has(a[href*=\"firecrawl.dev/signin\"]){order:99}nav ul li:has(a[href=\"https://github.com/firecrawl/firecrawl\"]){order:-1}#firecrawl-cta-widget{margin-top:24px}.firecrawl-cta-box{background:linear-gradient(180deg,rgba(255,77,0,.04) 0,rgba(255,77,0,.02) 100%);border:1px solid rgba(255,77,0,.15);border-radius:12px;padding:20px}.firecrawl-cta-logo{height:20px;width:auto;object-fit:contain;margin-bottom:12px}.dark .firecrawl-cta-logo-light,.firecrawl-cta-logo-dark{display:none}.dark .firecrawl-cta-logo-dark{display:block}.firecrawl-cta-title{font-size:18px;font-weight:600;color:#111;margin:0 0 8px;line-height:1.3}.firecrawl-cta-description{font-size:13px;line-height:1.5;color:#666;margin:0 0 16px}.firecrawl-cta-description strong{color:#333}.firecrawl-cta-buttons{display:flex;flex-direction:column;gap:8px}.firecrawl-cta-btn-primary{display:block;text-align:center;background-color:#ff4d00;color:#fff!important;font-size:14px;font-weight:500;line-height:1.5;padding:10px 16px;border-radius:16px;border:0!important;box-shadow:none!important;text-decoration:none!important;transition:background-color .2s ease}.firecrawl-cta-btn-primary:hover{background-color:#e64500;text-decoration:none!important}.firecrawl-cta-btn-inline{display:inline-block}.firecrawl-cta-btn-secondary{display:block;text-align:center;background-color:#fff;color:#333!important;font-size:14px;font-weight:500;padding:10px 16px;border-radius:16px;border:1px solid #e5e7eb;text-decoration:none!important;transition:border-color .2s ease,background-color .2s ease}.firecrawl-cta-btn-secondary:hover{background-color:#f9fafb;border-color:#d1d5db;text-decoration:none!important}.dark .firecrawl-cta-box{background:linear-gradient(180deg,rgba(255,77,0,.08) 0,rgba(255,77,0,.04) 100%);border-color:rgba(255,77,0,.2)}.dark .firecrawl-cta-title{color:#fff}.dark .firecrawl-cta-description{color:#aaa}.dark .firecrawl-cta-description strong{color:#ddd}.dark .firecrawl-cta-btn-primary{background-color:#ff4d00;color:#fff!important}.dark .firecrawl-cta-btn-secondary{background-color:rgba(255,255,255,.05);border-color:rgba(255,255,255,.1);color:#ddd!important}.dark .firecrawl-cta-btn-secondary:hover{background-color:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2)}@media (max-width:1024px){#firecrawl-cta-widget{display:none}}#footer a.max-w-36{max-width:none;overflow:visible;text-overflow:clip;white-space:nowrap}#footer div:has(>a.max-w-36){flex-wrap:wrap}#footer a[href*=\"community.firecrawl.dev\"]>svg{-webkit-mask-image:url(https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/comment-dots.svg)!important;mask-image:url(https://d3gk2c5xim1je2.cloudfront.net/fontawesome/v7.2.0/solid/comment-dots.svg)!important}.fc-agent-first,.fc-agent-prompt{--fc-heat:#fa5d19;--fc-heat-soft:rgba(250, 93, 25, 0.04);--fc-text:#262626;--fc-text-muted:rgba(38, 38, 38, 0.56);--fc-surface:#fff;--fc-subtle:rgba(0, 0, 0, 0.02);--fc-subtle-hover:rgba(0, 0, 0, 0.06);--fc-border:#ededed;color:var(--fc-text);font-family:inherit}.dark .fc-agent-first,.dark .fc-agent-prompt{--fc-heat-soft:rgba(250, 93, 25, 0.08);--fc-text:#f5f5f5;--fc-text-muted:rgba(255, 255, 255, 0.56);--fc-surface:#171717;--fc-subtle:rgba(255, 255, 255, 0.02);--fc-subtle-hover:rgba(255, 255, 255, 0.08);--fc-border:#2a2a2a}.fc-agent-first{position:relative;margin:20px 0 32px;border:1px solid var(--fc-border);background:var(--fc-surface)}.fc-agent-first-header{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;padding:24px}.fc-agent-first-header h3,.fc-client-panel h4{margin:0;color:var(--fc-text);font-weight:600}.fc-agent-first-header h3{font-size:20px;line-height:28px}.fc-agent-first-header [data-as=p],.fc-agent-first-header p{display:block;max-width:600px;margin:6px 0 0;color:var(--fc-text-muted);font-size:14px;line-height:20px}.fc-all-options-link{display:inline-flex;flex:none;align-items:center;gap:6px;margin-top:3px;color:var(--fc-text-muted)!important;font-size:13px;font-weight:500;text-decoration:none!important;transition:color 160ms ease}.fc-all-options-link:hover{color:var(--fc-heat)!important}.fc-client-tabs{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);overflow-x:auto;border-top:1px solid var(--fc-border);border-bottom:1px solid var(--fc-border);scrollbar-width:thin}.fc-client-tab{position:relative;display:flex;min-width:0;overflow:hidden;flex-direction:column;align-items:center;gap:8px;padding:14px 10px;border:0;border-right:1px solid var(--fc-border);background:0 0;color:var(--fc-text);cursor:pointer;text-align:center;transition:background-color 160ms ease}.fc-client-tab:last-child{border-right:0}.fc-client-tab:hover{background:var(--fc-subtle)}.fc-client-tab.is-active{background:var(--fc-heat-soft);box-shadow:inset 0 2px 0 var(--fc-heat)}.fc-agent-prompt-button:focus-visible,.fc-all-options-link:focus-visible,.fc-client-tab:focus-visible,.fc-copy-button:focus-visible,.fc-install-button:focus-visible{outline:2px solid var(--fc-heat);outline-offset:-2px}.fc-client-icon{display:block;width:26px;height:26px;flex:none;object-fit:contain}.dark .fc-client-icon-mono,.dark img[src*=\"agent-clients/chatgpt.svg\"],.dark img[src*=\"agent-clients/cursor.svg\"]{filter:invert(1) brightness(1.6)}.fc-client-tab-copy{display:flex;min-width:0;max-width:100%;flex-direction:column;gap:2px}.fc-client-tab-copy strong,.fc-client-tab-copy>span{overflow:hidden;color:var(--fc-text);font-size:14px;line-height:20px;text-overflow:ellipsis;white-space:nowrap}.fc-client-tab-copy>span{color:var(--fc-text-muted);font-size:13px;line-height:18px}.fc-client-panel{display:flex;flex-direction:column;gap:14px;padding:20px 24px 24px}.fc-client-panel[hidden]{display:none}.fc-client-description,.fc-client-description[data-as=p],.fc-client-hint,.fc-client-hint[data-as=p]{display:block;margin:0;color:var(--fc-text-muted);font-size:14px;line-height:21px}.fc-client-hint,.fc-client-hint[data-as=p]{font-size:13px;line-height:20px}.fc-client-description code,.fc-client-description[data-as=p] code,.fc-client-hint code,.fc-client-hint[data-as=p] code{border-radius:4px;background:var(--fc-subtle-hover);padding:2px 5px;color:var(--fc-text);font-size:.92em}.fc-code-block{overflow:hidden;border:1px solid var(--fc-border);border-radius:6px;background:var(--fc-subtle)}.fc-code-header{display:flex;min-height:38px;align-items:center;justify-content:space-between;gap:12px;padding:5px 8px 5px 14px;border-bottom:1px solid var(--fc-border);color:var(--fc-text-muted);font-size:12px;font-weight:500}.fc-code-block pre{margin:0;padding:14px 16px;overflow-x:auto;background:0 0;color:var(--fc-text);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:12.5px;line-height:20px;white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}.fc-code-block pre code{display:block;white-space:inherit;overflow-wrap:inherit;word-break:inherit}.fc-command-row{display:flex;align-items:center;gap:4px;padding:4px;border:1px solid var(--fc-border);border-radius:8px;background:var(--fc-subtle)}.fc-command-scroll{display:flex;min-width:0;flex:1;align-items:center;gap:10px;padding:7px 6px 7px 12px;overflow-x:auto;scrollbar-width:none;-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 24px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 24px),transparent)}.fc-command-scroll::-webkit-scrollbar{display:none}.fc-command-prompt,.fc-command-scroll code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:13px;line-height:20px}.fc-command-prompt{flex:none;color:var(--fc-text-muted);user-select:none}.fc-command-scroll code{padding:0 20px 0 0;border:0;border-radius:0;background:0 0;color:var(--fc-text);white-space:nowrap}.fc-copy-button{display:inline-flex;min-width:78px;height:28px;align-items:center;justify-content:center;gap:6px;padding:0 9px;border:0;border-radius:6px;background:0 0;color:var(--fc-text-muted);cursor:pointer;font-size:12px;font-weight:500;transition:background-color 160ms ease,color 160ms ease}.fc-copy-button:hover,.fc-install-button{background:var(--fc-subtle-hover);color:var(--fc-text)}.fc-copy-button.is-copied{color:var(--fc-heat)}.fc-install-button{display:inline-flex;width:fit-content;min-height:34px;align-items:center;justify-content:center;gap:7px;padding:0 12px;border-radius:6px;color:var(--fc-text)!important;font-size:13px;font-weight:600;text-decoration:none!important;transition:background-color 160ms ease,transform 160ms ease}.fc-copy-button.is-copied,.fc-install-button:hover{background:var(--fc-heat-soft)}.fc-agent-prompt-button:active,.fc-install-button:active{transform:scale(.98)}.fc-agent-prompt{margin:14px 0 28px}.fc-openai-install-actions{display:flex;flex-wrap:wrap;gap:12px}.fc-openai-install-actions a{text-decoration:none!important;color:var(--fc-text)!important}.fc-openai-install-actions img{flex:none;object-fit:contain}.fc-openai-install-hint{margin:12px 0 0;color:var(--fc-text-muted);font-size:13px;line-height:1.6}.fc-agent-prompt-button{display:inline-flex;min-height:44px;align-items:center;justify-content:center;gap:8px;padding:0 18px;border:0;border-radius:10px;background:var(--fc-subtle-hover);color:var(--fc-text);cursor:pointer;font-size:14px;font-weight:600;box-shadow:inset 0 .75px .75px 0 rgba(0,0,0,.02),inset 0 .25px .25px 0 rgba(0,0,0,.04);transition:background-color 160ms ease,color 160ms ease,transform 160ms ease}.fc-agent-prompt-button:hover{background:rgba(0,0,0,.08)}.dark .fc-agent-prompt-button:hover{background:rgba(255,255,255,.1)}.fc-agent-prompt-button.is-copied{background:var(--fc-heat-soft);color:var(--fc-heat);box-shadow:none}.fc-agent-first-footer{display:flex;flex-direction:column;gap:10px;padding:16px 24px 20px;border-top:1px solid var(--fc-border);background:var(--fc-subtle)}.card [data-component-part=card-icon] img{margin:0}div:has(>a>div.w-full>div.mt-8){height:100%;padding-bottom:60px}a>div.w-full>div.mt-8{position:absolute;right:24px;bottom:20px;left:24px;margin-top:0}.fc-footer-lead,.fc-footer-lead[data-as=p]{display:block;margin:0;color:var(--fc-text);font-size:13px;font-weight:500;line-height:20px}.fc-curve,.fc-curvy-corners{pointer-events:none}.fc-curve{position:absolute;z-index:3;width:11px;height:11px;fill:var(--fc-border)}.fc-curve-tl{top:0;left:0;transform:rotate(-90deg)}.fc-curve-tr{top:0;right:0}.fc-curve-bl{bottom:0;left:0;transform:rotate(180deg)}.fc-curve-br{right:0;bottom:0;transform:rotate(90deg)}.fc-sr-only{position:absolute;width:1px;height:1px;overflow:hidden;margin:-1px;padding:0;border:0;clip:rect(0,0,0,0);white-space:nowrap}@media (max-width:700px){.fc-agent-first-header{flex-direction:column;gap:12px;padding:20px}.fc-client-tabs{grid-auto-flow:row;grid-template-columns:repeat(2,minmax(0,1fr))}.fc-client-tab:nth-child(2n){border-right:0}.fc-client-tab{border-bottom:1px solid var(--fc-border)}.fc-client-tab:last-child,.fc-client-tab:nth-last-child(-n+2):nth-child(odd){border-bottom:0}.fc-client-panel{padding:16px 20px 20px}.fc-command-prompt,.fc-command-scroll code{font-size:12px}.fc-agent-first-footer{padding:14px 20px 18px}.fc-agent-prompt-button,.fc-install-button{width:100%}}@media (prefers-reduced-motion:reduce){.fc-agent-first *,.fc-agent-prompt *{scroll-behavior:auto!important;transition-duration:.01ms!important}}"}],"page":{"pagePath":"pt-BR/webhooks/security","slug":"/pt-BR/webhooks/security","pageMetadata":{"title":"Segurança","description":"Verifique a autenticidade de webhooks","og:title":"Segurança de Webhooks | Firecrawl","og:description":"Verifique a autenticidade de webhooks","icon":"shield-check","href":"/pt-BR/webhooks/security"},"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: \"Verifique a autenticidade de webhooks\"\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`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,CodeGroup,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Verifique se cada requisição de webhook realmente veio do Firecrawl conferindo sua assinatura HMAC-SHA256. Isso impede que invasores falsifiquem payloads e permite que você confie nos dados antes de agir com base neles.`}),`\n`,_jsx(Heading,{level:`2`,id:`secret-key`,children:`Chave secreta`}),`\n`,_jsxs(_components.p,{children:[`Seu segredo de webhook está disponível na `,_jsx(_components.a,{href:`https://www.firecrawl.dev/app/settings?tab=advanced`,children:`aba Advanced`}),` das configurações da sua conta. Cada conta tem um segredo exclusivo usado para assinar todas as solicitações de webhook.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Mantenha seu segredo de webhook em segurança e nunca o exponha publicamente. Se você acreditar que seu segredo foi comprometido, gere um novo imediatamente nas configurações da sua conta.`})}),`\n`,_jsx(Heading,{level:`2`,id:`signature-verification`,children:`Verificação de assinatura`}),`\n`,_jsxs(_components.p,{children:[`Cada requisição de webhook inclui um cabeçalho `,_jsx(_components.code,{children:`X-Firecrawl-Signature`}),`:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`X-Firecrawl-Signature: sha256=abc123def456...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`3`,id:`how-to-verify`,children:`Como verificar`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Extraia a assinatura do cabeçalho `,_jsx(_components.code,{children:`X-Firecrawl-Signature`})]}),`\n`,_jsx(_components.li,{children:`Obtenha o corpo bruto da requisição exatamente como recebido (não faça parsing antes)`}),`\n`,_jsx(_components.li,{children:`Calcule o HMAC-SHA256 usando sua chave secreta`}),`\n`,_jsx(_components.li,{children:`Compare as assinaturas usando uma função de comparação segura a timing (timing-safe)`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`implementation`,children:`Implementação`}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Node/Express`,numberOfLines:`41`,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:`41`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` crypto`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'crypto'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` express`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'express'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` app`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` express`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Use o parser de corpo bruto para verificar a assinatura`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`use`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'/webhook/firecrawl'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`express`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`raw`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'application/json'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }));`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`post`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'/webhook/firecrawl'`}),_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:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` signature`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--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:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'X-Firecrawl-Signature'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` webhookSecret`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`FIRECRAWL_WEBHOOK_SECRET`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`signature`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ||`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`webhookSecret`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_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:`401`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`send`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Não autorizado'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Extraia o hash do cabeçalho de assinatura`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`algorithm`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`hash`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` signature`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`split`}),_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:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`algorithm`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'sha256'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_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:`401`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`send`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Algoritmo de assinatura inválido'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Calcule a assinatura esperada`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` expectedSignature`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` crypto`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`createHmac`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'sha256'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`webhookSecret`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`update`}),_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:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` .`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`digest`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'hex'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Verifique a assinatura usando comparação com segurança temporal`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`crypto`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`timingSafeEqual`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Buffer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`hash`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'hex'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`), `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Buffer`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`expectedSignature`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'hex'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`))) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_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:`401`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`).`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`send`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Assinatura inválida'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Analise e processe o webhook verificado`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` event`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` JSON`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`parse`}),_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:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Webhook do Firecrawl verificado:'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`event`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#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:`send`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'ok'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`listen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3000`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, () `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Escutando na porta 3000'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`Python/Flask`,numberOfLines:`42`,language:`python`,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:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`42`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hmac`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hashlib`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` flask `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Flask, request, abort`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`app `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Flask(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:`__name__`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`WEBHOOK_SECRET`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'your-webhook-secret-here'`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Obtenha no dashboard do Firecrawl`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`@app.post`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'/webhook/firecrawl'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` webhook`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`():`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` signature `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` request.headers.get(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'X-Firecrawl-Signature'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` not`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` signature:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` abort(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`401`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Cabeçalho de assinatura ausente'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Extrair o hash do cabeçalho de assinatura`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` try`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` algorithm, hash_value `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` signature.split(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'='`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` algorithm `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'sha256'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` abort(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`401`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Algoritmo de assinatura inválido'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` except`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` ValueError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` abort(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`401`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Formato de assinatura inválido'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Calcular a assinatura esperada`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` expected_signature `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hmac.new(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` WEBHOOK_SECRET`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.encode(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'utf-8'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` request.data,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hashlib.sha256`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ).hexdigest()`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Verificar a assinatura usando comparação protegida contra análise de tempo`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` not`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` hmac.compare_digest(hash_value, expected_signature):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` abort(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`401`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Assinatura inválida'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Analisar e processar o webhook verificado`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` event `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` request.get_json(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`force`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`True`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:` print`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Webhook verificado do Firecrawl:'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, event)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` `})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'ok'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`200`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#9CDCFE`},children:` __name__`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '__main__'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` app.run(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`port`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3000`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})})]}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Boas práticas`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Verifique cada requisição.`}),` Sempre verifique a assinatura antes de processar um payload de webhook. Rejeite qualquer requisição que falhe na verificação com status `,_jsx(_components.code,{children:`401`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Use comparações seguras a timing.`}),` Comparações padrão de strings podem revelar informações por tempo de execução. Use `,_jsx(_components.code,{children:`crypto.timingSafeEqual()`}),` no Node.js ou `,_jsx(_components.code,{children:`hmac.compare_digest()`}),` no Python.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Disponibilize seu endpoint via HTTPS.`}),` Isso garante que os payloads de webhook sejam criptografados em trânsito.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Segurança","description":"Verifique a autenticidade de webhooks","og:title":"Segurança de Webhooks | Firecrawl","og:description":"Verifique a autenticidade de webhooks","icon":"shield-check","href":"/pt-BR/webhooks/security"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Chave secreta","slug":"secret-key","depth":2,"children":[]},{"title":"Verificação de assinatura","slug":"signature-verification","depth":2,"children":[{"title":"Como verificar","slug":"how-to-verify","depth":3,"children":[]},{"title":"Implementação","slug":"implementation","depth":3,"children":[]}]},{"title":"Boas práticas","slug":"best-practices","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/firecrawl/0081870911af9531/ready-to-build-cta.js","/_mintlify/custom/firecrawl/8c36557b13c6e455/chatbase-widget.js"],"subdomain":"firecrawl","siteName":"Firecrawl Docs","title":"Segurança de Webhooks | Firecrawl","navMaps":{"firstHrefInVersion":{"v2":{"href":"/pt-BR/webhooks/security","matchLevel":0},"v1":{"href":"/pt-BR/webhooks/security","matchLevel":0}},"firstHrefInLanguage":{"en":{"href":"/webhooks/security","matchLevel":1},"es":{"href":"/es/webhooks/security","matchLevel":1},"fr":{"href":"/fr/webhooks/security","matchLevel":1},"ja":{"href":"/ja/webhooks/security","matchLevel":1},"pt-BR":{"href":"/pt-BR/webhooks/security","matchLevel":0},"zh":{"href":"/zh/webhooks/security","matchLevel":1}}},"lastModified":"2026-09-27T17:30:02.799Z","originalFileLocation":"pt-BR/webhooks/security.mdx","locale":"pt-BR"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Verifique a autenticidade de webhooks\">\u003cmeta data-mint-head name=\"application-name\" content=\"Firecrawl Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/firecrawl/XqnL63rz4lpKQF4P/_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/firecrawl/XqnL63rz4lpKQF4P/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/firecrawl/XqnL63rz4lpKQF4P/_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/firecrawl/XqnL63rz4lpKQF4P/_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/firecrawl/XqnL63rz4lpKQF4P/_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/firecrawl/XqnL63rz4lpKQF4P/_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/firecrawl/XqnL63rz4lpKQF4P/_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/firecrawl/XqnL63rz4lpKQF4P/_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/firecrawl/XqnL63rz4lpKQF4P/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Segurança de Webhooks | Firecrawl\">\u003cmeta data-mint-head property=\"og:description\" content=\"Verifique a autenticidade de webhooks\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Firecrawl Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.firecrawl.dev/pt-BR/webhooks/security\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://firecrawl.mintlify.app/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=Seguran%C3%A7a\u0026amp;description=Verifique+a+autenticidade+de+webhooks\u0026amp;theme=8a1db76e69d61f6ba4524cb0\u0026amp;signature=d95eae69ee836203188c3d78c071675233c20f7283d074e7f79dc980e927dcc7\">\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=\"Segurança de Webhooks | Firecrawl\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Verifique a autenticidade de webhooks\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://firecrawl.mintlify.app/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=Seguran%C3%A7a\u0026amp;description=Verifique+a+autenticidade+de+webhooks\u0026amp;theme=8a1db76e69d61f6ba4524cb0\u0026amp;signature=d95eae69ee836203188c3d78c071675233c20f7283d074e7f79dc980e927dcc7\">\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/firecrawl/XqnL63rz4lpKQF4P/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Firecrawl Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#000\">\u003cmeta data-mint-head name=\"google-site-verification\" content=\"Y83UZz1dXMKuT59lnLY_7umo6LJorqIwuP_2rFX6_eE\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.firecrawl.dev/pt-BR/webhooks/security\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/pt-BR/webhooks/security.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://docs.firecrawl.dev/pt-BR/webhooks/security\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.firecrawl.dev/webhooks/security\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.firecrawl.dev/es/webhooks/security\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr\" href=\"https://docs.firecrawl.dev/fr/webhooks/security\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://docs.firecrawl.dev/ja/webhooks/security\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://docs.firecrawl.dev/zh/webhooks/security\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.firecrawl.dev/webhooks/security\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.firecrawl.dev/#organization\",\"name\":\"Firecrawl Docs\",\"url\":\"https://docs.firecrawl.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/firecrawl/iilnMwCX-8eR1yOO/logo/logo.png?fit=max\u0026auto=format\u0026n=iilnMwCX-8eR1yOO\u0026q=85\u0026s=c45b3c967c19a39190e76fe8e9c2ed5a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.firecrawl.dev#website\",\"name\":\"Firecrawl Docs\",\"url\":\"https://docs.firecrawl.dev\",\"publisher\":{\"@id\":\"https://docs.firecrawl.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.firecrawl.dev/pt-BR/webhooks/security#webpage\",\"url\":\"https://docs.firecrawl.dev/pt-BR/webhooks/security\",\"name\":\"Segurança\",\"description\":\"Verifique a autenticidade de webhooks\",\"dateModified\":\"2026-09-27T17:30:02.799Z\",\"isPartOf\":{\"@id\":\"https://docs.firecrawl.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.firecrawl.dev/pt-BR/webhooks/security#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.firecrawl.dev/pt-BR/webhooks/security#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Webhooks\",\"item\":\"https://docs.firecrawl.dev/pt-BR/webhooks/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Segurança\",\"item\":\"https://docs.firecrawl.dev/pt-BR/webhooks/security\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.firecrawl.dev/pt-BR/webhooks/security#article\",\"headline\":\"Segurança\",\"name\":\"Segurança\",\"description\":\"Verifique a autenticidade de webhooks\",\"url\":\"https://docs.firecrawl.dev/pt-BR/webhooks/security\",\"mainEntityOfPage\":{\"@id\":\"https://docs.firecrawl.dev/pt-BR/webhooks/security#webpage\"},\"dateModified\":\"2026-09-27T17:30:02.799Z\",\"publisher\":{\"@id\":\"https://docs.firecrawl.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.firecrawl.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Firecrawl Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Firecrawl Docs","nav":{"global":null,"languages":[{"language":"en","pages":[{"title":"en","href":"/webhooks/security"}]},{"language":"es","pages":[{"title":"es","href":"/es/webhooks/security"}]},{"language":"fr","pages":[{"title":"fr","href":"/fr/webhooks/security"}]},{"language":"ja","pages":[{"title":"ja","href":"/ja/webhooks/security"}]},{"language":"pt-BR","versions":[{"version":"v2","tabs":[{"tab":"Documentação","groups":[{"group":"Primeiros passos","pages":[{"title":"Introdução","href":"/pt-BR/introduction"},{"title":"Firecrawl no ChatGPT e no Codex","sidebarTitle":"ChatGPT e Codex","icon":"https://mintlify.s3.us-west-1.amazonaws.com/firecrawl/images/agent-clients/codex.svg","href":"/pt-BR/integrations/chatgpt-codex"},{"sidebarTitle":"Claude \u0026 Claude Code","title":"Firecrawl no Claude e no Claude Code","icon":"https://mintlify.s3.us-west-1.amazonaws.com/firecrawl/images/agent-clients/claude-ai.svg","href":"/pt-BR/quickstarts/claude-code"},{"sidebarTitle":"Claude Desktop e Cowork","title":"Firecrawl no Claude Desktop e no Cowork","icon":"https://mintlify.s3.us-west-1.amazonaws.com/firecrawl/images/agent-clients/claude-ai.svg","href":"/pt-BR/quickstarts/claude-desktop"},{"sidebarTitle":"Cursor","icon":"https://mintlify.s3.us-west-1.amazonaws.com/firecrawl/images/agent-clients/cursor.svg","title":"Pesquisa e scraping na web com MCP no Cursor","href":"/pt-BR/quickstarts/cursor"},{"group":"MCP","root":{"title":"Primeiros passos","sidebarTitle":"Primeiros passos","href":"/pt-BR/mcp-server"},"pages":[{"title":"Primeiros passos","sidebarTitle":"Primeiros passos","href":"/pt-BR/mcp-server"},{"title":"Para agentes","sidebarTitle":"Para agentes","href":"/pt-BR/mcp-server/keyless"},{"title":"Para humanos","sidebarTitle":"Para humanos","href":"/pt-BR/mcp-server/oauth"}]},{"title":"CLI","href":"/pt-BR/sdks/cli"},{"title":"Guia Avançado de Scraping","href":"/pt-BR/advanced-scraping-guide"},{"group":"Planos e cobrança","pages":[{"title":"Cobrança","href":"/pt-BR/billing"},{"title":"Limites de taxa","href":"/pt-BR/rate-limits"},{"title":"Créditos de parceiro","href":"/pt-BR/partner-credits"}]},{"group":"Enterprise","pages":[{"title":"Enterprise","href":"/pt-BR/enterprise"},{"title":"Visão geral de segurança","href":"/pt-BR/security"},{"title":"SSO e SCIM","href":"/pt-BR/features/sso"},{"title":"Restrições de IP","href":"/pt-BR/features/ip-restrictions"},{"title":"Restrições de chave","href":"/pt-BR/features/key-restrictions"},{"title":"Proteção contra ameaças","href":"/pt-BR/features/threat-protection"},{"title":"Registro de auditoria do SIEM","href":"/pt-BR/features/siem"}]}]},{"group":"Endpoints principais","pages":[{"group":"Busca","icon":"magnifying-glass","pages":[{"title":"Busca","icon":"magnifying-glass","href":"/pt-BR/features/search"},{"title":"Destaques da Busca","icon":"highlighter","href":"/pt-BR/features/search-highlights"},{"title":"Índice de research","icon":"book-open","href":"/pt-BR/features/research"},{"title":"Índice para desenvolvedores","icon":"code","href":"/pt-BR/features/developer"},{"title":"Government Index","icon":"scale-balanced","href":"/pt-BR/features/gov"}]},{"group":"Scraping","icon":"markdown","pages":[{"title":"scraping","href":"/pt-BR/features/scrape"},{"title":"Raspagem mais rápida","href":"/pt-BR/features/fast-scraping"},{"title":"Raspagem em lote","href":"/pt-BR/features/batch-scrape"},{"title":"Modo JSON - Resultado Estruturado","sidebarTitle":"Modo JSON","href":"/pt-BR/features/llm-extract"},{"title":"Rastreio de mudanças","sidebarTitle":"Rastreio de mudanças","href":"/pt-BR/features/change-tracking"},{"title":"Modo Aprimorado","href":"/pt-BR/features/enhanced-mode"},{"title":"Modo Lockdown","href":"/pt-BR/features/lockdown"},{"title":"Ocultação de PII","href":"/pt-BR/features/pii-redaction"},{"title":"Proxies","href":"/pt-BR/features/proxies"},{"title":"Análise de Documentos","href":"/pt-BR/features/document-parsing"}]},{"group":"Monitor","icon":"radar","pages":[{"title":"Monitoramento","icon":"radar","href":"/pt-BR/features/monitoring"},{"title":"Monitoramento de páginas","sidebarTitle":"Página","icon":"file-lines","href":"/pt-BR/features/monitoring-page"},{"title":"Monitoramento de site","sidebarTitle":"Site","icon":"spider","href":"/pt-BR/features/monitoring-website"},{"title":"Monitoramento em escala de toda a web","sidebarTitle":"Escala de toda a web","icon":"globe","href":"/pt-BR/features/monitoring-web-scale"}]},{"group":"Interagir / Browser Sandbox","icon":"hand-pointer","pages":[{"title":"Interaja após o scraping","sidebarTitle":"interagir","icon":"hand-pointer","href":"/pt-BR/features/interact"},{"title":"Sandbox de Navegador","icon":"browser","sidebarTitle":"Sandbox de Navegador","href":"/pt-BR/features/browser"}]}]},{"group":"Mais","pages":[{"title":"Alexandria","icon":"books","href":"/pt-BR/features/alexandria"},{"title":"Parse","icon":"file-magnifying-glass","version":"v2","sidebarTitle":"Parse","href":"/pt-BR/features/parse"},{"title":"Mapa","icon":"map","version":"v2","sidebarTitle":"Mapa","href":"/pt-BR/features/map"},{"title":"Rastreamento","icon":"spider","href":"/pt-BR/features/crawl"},{"title":"agente","sidebarTitle":"agente","icon":"magic","href":"/pt-BR/features/agent"}]},{"group":"Guias de início rápido","pages":[{"group":"Node.js","pages":[{"title":"Node.js","href":"/pt-BR/quickstarts/nodejs"},{"title":"Next.js","href":"/pt-BR/quickstarts/nextjs"},{"title":"Express","href":"/pt-BR/quickstarts/express"},{"title":"NestJS","href":"/pt-BR/quickstarts/nestjs"},{"title":"Fastify","href":"/pt-BR/quickstarts/fastify"},{"title":"Hono","href":"/pt-BR/quickstarts/hono"},{"title":"Bun","href":"/pt-BR/quickstarts/bun"},{"title":"Remix","href":"/pt-BR/quickstarts/remix"},{"title":"Nuxt","href":"/pt-BR/quickstarts/nuxt"},{"title":"SvelteKit","href":"/pt-BR/quickstarts/sveltekit"},{"title":"Astro","href":"/pt-BR/quickstarts/astro"},{"title":"Mastra","href":"/pt-BR/quickstarts/mastra"}]},{"group":"Serverless","pages":[{"title":"Cloudflare Workers","href":"/pt-BR/quickstarts/cloudflare-workers"},{"title":"Vercel Functions","href":"/pt-BR/quickstarts/vercel-functions"},{"title":"Marketplace da Vercel","href":"/pt-BR/quickstarts/vercel-marketplace"},{"title":"AWS Lambda","href":"/pt-BR/quickstarts/aws-lambda"},{"title":"Supabase Edge Functions","href":"/pt-BR/quickstarts/supabase-edge-functions"},{"title":"Deno Deploy","href":"/pt-BR/quickstarts/deno-deploy"}]},{"group":"PHP","pages":[{"title":"PHP","href":"/pt-BR/quickstarts/php"},{"title":"Laravel","href":"/pt-BR/quickstarts/laravel"}]},{"group":"Ruby","pages":[{"title":"Ruby","href":"/pt-BR/quickstarts/ruby"},{"title":"Rails","href":"/pt-BR/quickstarts/rails"}]},{"group":"Python","pages":[{"title":"Python","href":"/pt-BR/quickstarts/python"},{"title":"FastAPI","href":"/pt-BR/quickstarts/fastapi"},{"title":"Django","href":"/pt-BR/quickstarts/django"},{"title":"Flask","href":"/pt-BR/quickstarts/flask"}]},{"title":"Go","href":"/pt-BR/quickstarts/go"},{"title":"Rust","href":"/pt-BR/quickstarts/rust"},{"title":"Elixir","href":"/pt-BR/quickstarts/elixir"},{"group":"Java","pages":[{"title":"Java","href":"/pt-BR/quickstarts/java"},{"title":"Spring Boot","href":"/pt-BR/quickstarts/spring-boot"}]},{"group":".NET","pages":[{"title":".NET","href":"/pt-BR/quickstarts/dotnet"},{"title":"ASP.NET Core","href":"/pt-BR/quickstarts/aspnet-core"}]}]},{"group":"Guias para desenvolvedores","pages":[{"title":"Modelos Full Stack","icon":"star","href":"/pt-BR/developer-guides/examples"},{"group":"Guias de uso","icon":"compass","pages":[{"title":"Escolhendo o Extrator de Dados","sidebarTitle":"Escolhendo o Extrator de Dados","href":"/pt-BR/developer-guides/usage-guides/choosing-the-data-extractor"},{"title":"Verificando Atualidade e Disponibilidade","sidebarTitle":"Verificando Atualidade e Disponibilidade","href":"/pt-BR/developer-guides/usage-guides/verifying-freshness-and-liveness"}]},{"group":"SDKs e frameworks de LLM","icon":"puzzle-piece","pages":[{"title":"OpenAI","href":"/pt-BR/developer-guides/llm-sdks-and-frameworks/openai"},{"title":"Anthropic","href":"/pt-BR/developer-guides/llm-sdks-and-frameworks/anthropic"},{"title":"Gemini","href":"/pt-BR/developer-guides/llm-sdks-and-frameworks/gemini"},{"title":"Agent Development Kit (ADK)","href":"/pt-BR/developer-guides/llm-sdks-and-frameworks/google-adk"},{"title":"Fundamente o Gemini no Vertex AI com a busca do Firecrawl","href":"/pt-BR/developer-guides/llm-sdks-and-frameworks/vertex-ai-grounding"},{"title":"Vercel AI SDK","href":"/pt-BR/developer-guides/llm-sdks-and-frameworks/vercel-ai-sdk"},{"title":"LangChain","href":"/pt-BR/developer-guides/llm-sdks-and-frameworks/langchain"},{"title":"LangGraph","href":"/pt-BR/developer-guides/llm-sdks-and-frameworks/langgraph"},{"title":"LlamaIndex","href":"/pt-BR/developer-guides/llm-sdks-and-frameworks/llamaindex"},{"title":"Mastra","href":"/pt-BR/developer-guides/llm-sdks-and-frameworks/mastra"},{"title":"ElevenAgents","href":"/pt-BR/developer-guides/llm-sdks-and-frameworks/elevenagents"},{"title":"Jev","href":"/pt-BR/developer-guides/llm-sdks-and-frameworks/jev"}]},{"group":"Guias práticos","icon":"book","pages":[{"title":"Criando um Assistente de Pesquisa com IA usando Firecrawl e AI SDK","href":"/pt-BR/developer-guides/cookbooks/ai-research-assistant-cookbook"},{"title":"Criando um Gerador de Guia de Estilo de Marca com Firecrawl","href":"/pt-BR/developer-guides/cookbooks/brand-style-guide-generator-cookbook"}]},{"group":"Plataformas e frameworks","icon":"puzzle-piece","pages":[{"title":"Agente Hermes","href":"/pt-BR/integrations/hermes"},{"title":"Replit","href":"/pt-BR/integrations/replit"},{"title":"Lovable","href":"/pt-BR/integrations/lovable"},{"title":"Stripe Projects","href":"/pt-BR/integrations/stripe-projects"},{"title":"LangChain","href":"/pt-BR/integrations/langchain"},{"title":"LlamaIndex","href":"/pt-BR/integrations/llamaindex"},{"title":"CrewAI","href":"/pt-BR/integrations/crewai"},{"title":"Camel AI","href":"/pt-BR/integrations/camelai"},{"title":"Praison AI","href":"/pt-BR/integrations/praison"},{"title":"Neuron AI","href":"/pt-BR/integrations/neuron-ai"},{"title":"Dify","href":"/pt-BR/integrations/dify"},{"title":"Langflow","href":"/pt-BR/integrations/langflow"},{"title":"Flowise","href":"/pt-BR/integrations/flowise"},{"title":"Zapier","href":"/pt-BR/integrations/zapier"},{"title":"Make","href":"/pt-BR/integrations/make"},{"title":"n8n","href":"/pt-BR/integrations/n8n"},{"title":"Tines","href":"/pt-BR/integrations/tines"},{"title":"Pipedream","href":"/pt-BR/integrations/pipedream"},{"title":"Composio","href":"/pt-BR/integrations/composio"}]}]},{"group":"Webhooks","pages":[{"title":"Visão geral","icon":"link","href":"/pt-BR/webhooks/overview"},{"title":"Tipos de eventos","description":"Referência de eventos de webhook","icon":"bolt","href":"/pt-BR/webhooks/events"},{"title":"Segurança","icon":"shield-check","href":"/pt-BR/webhooks/security"},{"title":"Testes","description":"Testar e depurar webhooks","icon":"bug","href":"/pt-BR/webhooks/testing"}]},{"group":"Casos de uso","pages":[{"title":"Casos de uso","sidebarTitle":"Visão geral","icon":"sparkles","href":"/pt-BR/use-cases/overview"},{"title":"Plataformas de IA","sidebarTitle":"Plataformas de IA","icon":"robot","href":"/pt-BR/use-cases/ai-platforms"},{"title":"Enriquecimento de Leads","sidebarTitle":"Enriquecimento de Leads","icon":"user-plus","href":"/pt-BR/use-cases/lead-enrichment"},{"title":"Plataformas de SEO","sidebarTitle":"Plataformas de SEO","icon":"magnifying-glass","href":"/pt-BR/use-cases/seo-platforms"},{"title":"Pesquisa avançada","sidebarTitle":"Pesquisa avançada","icon":"microscope","href":"/pt-BR/use-cases/deep-research"},{"group":"Ver mais","pages":[{"title":"Produto e e-commerce","sidebarTitle":"Produto e e-commerce","icon":"cart-shopping","href":"/pt-BR/use-cases/product-ecommerce"},{"title":"Geração de Conteúdo","sidebarTitle":"Geração de Conteúdo","icon":"pen","href":"/pt-BR/use-cases/content-generation"},{"title":"Desenvolvedores \u0026 MCP","sidebarTitle":"Desenvolvedores \u0026 MCP","icon":"code","href":"/pt-BR/use-cases/developers-mcp"},{"title":"Investimentos e Finanças","sidebarTitle":"Investimentos e Finanças","icon":"chart-line","href":"/pt-BR/use-cases/investment-finance"},{"title":"Inteligência Competitiva","sidebarTitle":"Inteligência Competitiva","icon":"binoculars","href":"/pt-BR/use-cases/competitive-intelligence"},{"title":"Migração de Dados","sidebarTitle":"Migração de Dados","icon":"arrows-rotate","href":"/pt-BR/use-cases/data-migration"},{"title":"Observabilidade e Monitoramento","sidebarTitle":"Observabilidade","icon":"chart-mixed","href":"/pt-BR/use-cases/observability"}]}]},{"group":"Outros","pages":[{"title":"Visão geral","href":"/pt-BR/dashboard"},{"title":"Depure o Firecrawl com o Ask","sidebarTitle":"Depure com o Ask","icon":"messages-question","href":"/pt-BR/features/ask"}]},{"group":"Como contribuir","pages":[{"title":"Código aberto ou Firecrawl Cloud","sidebarTitle":"Código aberto vs. Cloud","href":"/pt-BR/contributing/open-source-or-cloud"},{"title":"Configuração para contribuidores do Firecrawl","sidebarTitle":"Configuração para contribuidores","href":"/pt-BR/contributing/guide"},{"title":"Auto-hospedagem do Firecrawl","sidebarTitle":"Auto-hospedagem","href":"/pt-BR/contributing/self-host"}]}]},{"tab":"SDKs","pages":[{"title":"SDKs","href":"/pt-BR/sdks/overview"}]},{"tab":"Referência da API","pages":[{"title":"Referência da API","href":"/pt-BR/api-reference/v2-introduction"}]},{"tab":"Desenvolva com IA","pages":[{"title":"Desenvolva com IA","href":"/pt-BR/ai-onboarding"}]}]},{"version":"v1","hidden":true,"tabs":[{"tab":"Documentação","hidden":true,"searchable":true,"groups":[{"group":"Primeiros passos","pages":[{"title":"Introdução","description":"A API de contexto para agentes de IA. Faça uma busca na web, faça scraping de qualquer página e interaja com ela por meio de uma única API.","href":"/pt-BR/introduction"},{"title":"Primeiros passos","description":"Configure o Firecrawl MCP com acesso sem chave, login na conta ou uma API key.","sidebarTitle":"Primeiros passos","href":"/pt-BR/mcp-server"},{"title":"Guia Avançado de Scraping","description":"Configure opções de scraping, ações do navegador, rastreamento, map e o endpoint do agente em toda a API do Firecrawl.","href":"/pt-BR/advanced-scraping-guide"},{"group":"Planos e cobrança","pages":[{"title":"Cobrança","description":"Como funcionam cobrança, créditos e planos do Firecrawl","href":"/pt-BR/billing"},{"title":"Limites de taxa","description":"Limites de taxa para diferentes planos e solicitações à API","href":"/pt-BR/rate-limits"},{"title":"Créditos de parceiro","description":"Como funcionam os créditos de parceiro da Firecrawl, incluindo elegibilidade, validade e limites do plano","href":"/pt-BR/partner-credits"}]},{"group":"Empresarial","pages":[{"title":"Enterprise","description":"Planos Enterprise, segurança e recursos do Firecrawl em escala","href":"/pt-BR/enterprise"},{"title":"Visão geral de segurança","description":"Como o Firecrawl protege seus dados: retenção zero de dados, DPA, SSO, controles de acesso e residência de dados, tudo em um só lugar para sua avaliação de segurança.","href":"/pt-BR/security"},{"title":"SSO e SCIM","description":"Configure o login único (SSO) e a sincronização de diretório via SCIM para que sua equipe faça login pelo seu provider de identidade e o acesso dos usuários permaneça sincronizado com o seu diretório.","href":"/pt-BR/features/sso"},{"title":"Restrições de IP","description":"Restrinja as chaves de API da sua equipe a uma lista de permissões de endereços IP ou intervalos CIDR, para que funcionem apenas em redes aprovadas. Aplicado no servidor.","href":"/pt-BR/features/ip-restrictions"},{"title":"Restrições de chave","description":"Restrinja uma chave de API individual a endpoints e formatos de resultado específicos. Aplicado no servidor, sem possibilidade de uma requisição sobrescrever isso.","href":"/pt-BR/features/key-restrictions"},{"title":"Proteção contra ameaças","description":"Bloqueie requests para URLs arriscadas em todos os endpoints usando uma política controlada pela sua organização. Aplicado no servidor.","href":"/pt-BR/features/threat-protection"},{"title":"Registro de auditoria do SIEM","description":"Envie um evento de auditoria estruturado ao seu SIEM para cada scraping realizado pela sua equipe, começando pelo Microsoft Sentinel. Entrega no lado do servidor.","href":"/pt-BR/features/siem"}]}]},{"group":"Novidades","pages":[{"group":"Agente","icon":"magic","hidden":true,"pages":[]}]},{"group":"Recursos padrão","pages":[{"group":"Raspagem","icon":"markdown","pages":[{"title":"scraping","description":"Transforme qualquer URL em Markdown limpo ou dados estruturados","href":"/pt-BR/features/scrape"},{"title":"Raspagem mais rápida","description":"Acelere suas raspagens em 500% com o parâmetro maxAge","href":"/pt-BR/features/fast-scraping"},{"title":"Raspagem em lote","description":"Raspe várias URLs em uma única tarefa em lote","href":"/pt-BR/features/batch-scrape"},{"title":"Modo JSON - Resultado Estruturado","description":"Extraia dados estruturados de páginas com LLMs","sidebarTitle":"Modo JSON","href":"/pt-BR/features/llm-extract"},{"title":"Rastreio de mudanças","description":"Detecte e monitore mudanças em conteúdo da web entre scrapings","sidebarTitle":"Rastreio de mudanças","href":"/pt-BR/features/change-tracking"},{"title":"Modo Aprimorado","description":"Use proxies aprimorados para scraping confiável em sites complexos","href":"/pt-BR/features/enhanced-mode"},{"title":"Proxies","description":"Saiba mais sobre tipos de proxy, regiões e como o Firecrawl seleciona proxies para suas requisições.","href":"/pt-BR/features/proxies"}]},{"title":"Rastreamento","description":"Rastreie recursivamente um site e obtenha conteúdo de cada página","icon":"spider","href":"/pt-BR/features/crawl"},{"title":"Mapa","description":"Insira um site e obtenha todas as URLs dele — extremamente rápido","icon":"map","version":"v2","sidebarTitle":"Mapa","href":"/pt-BR/features/map"},{"title":"Busca","description":"Pesquise na web e obtenha o conteúdo completo dos resultados","icon":"magnifying-glass","href":"/pt-BR/features/search"}]},{"group":"Webhooks","pages":[{"title":"Visão geral","description":"Notificações em tempo real para suas operações no Firecrawl","icon":"link","href":"/pt-BR/webhooks/overview"},{"title":"Tipos de eventos","description":"Referência de eventos de webhook","icon":"bolt","href":"/pt-BR/webhooks/events"},{"title":"Segurança","icon":"shield-check","href":"/pt-BR/webhooks/security"},{"title":"Testes","description":"Testar e depurar webhooks","icon":"bug","href":"/pt-BR/webhooks/testing"}]},{"group":"Painel","pages":[{"title":"Visão geral","description":"Visão geral do painel do Firecrawl e seus principais recursos","href":"/pt-BR/dashboard"}]}]},{"tab":"SDKs","hidden":true,"searchable":true,"pages":[{"title":"SDKs","href":"/pt-BR/sdks/overview"}]},{"tab":"Integrações","href":"https://www.firecrawl.dev/app"},{"tab":"Referência da API","pages":[{"title":"Referência da API","href":"/pt-BR/v1/api-reference/introduction"}]}]}],"global":{"anchors":[{"anchor":"Playground","icon":"play","href":"https://firecrawl.dev/playground"},{"anchor":"Blog","icon":"newspaper","href":"https://firecrawl.dev/blog"},{"anchor":"Comunidade","icon":"comment-dots","href":"https://community.firecrawl.dev/"},{"anchor":"Registro de alterações","icon":"list","href":"https://firecrawl.dev/changelog"}]}},{"language":"zh","pages":[{"title":"zh","href":"/zh/webhooks/security"}]}]},"title":"Segurança de Webhooks | Firecrawl","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":[],"chunks":[]}