Vérifiez que chaque requête de webhook provient bien de Firecrawl en vérifiant sa signature HMAC-SHA256. Cela empêche les attaquants d’usurper des payloads et vous permet d’avoir confiance dans les données avant d’agir en conséquence.
Le secret de votre webhook est disponible dans l’onglet Avancé des paramètres de votre compte. Chaque compte dispose d’un secret unique utilisé pour signer toutes les requêtes webhook.
Gardez le secret de votre webhook en lieu sûr et ne l’exposez jamais publiquement. Si vous pensez
que votre secret a été compromis, régénérez-le immédiatement depuis les paramètres
de votre compte.
import crypto from 'crypto';import express from 'express';const app = express();// Utiliser un parseur de corps brut pour vérifier la signatureapp.use('/webhook/firecrawl', express.raw({ type: 'application/json' }));app.post('/webhook/firecrawl', (req, res) => { const signature = req.get('X-Firecrawl-Signature'); const webhookSecret = process.env.FIRECRAWL_WEBHOOK_SECRET; if (!signature || !webhookSecret) { return res.status(401).send('Non autorisé'); } // Extract hash from signature header // Extraire le hash de l’en-tête de signature if (algorithm !== 'sha256') { return res.status(401).send('Algorithme de signature invalide'); } // Calculer la signature attendue const expectedSignature = crypto .createHmac('sha256', webhookSecret) .update(req.body) .digest('hex'); // Vérifier la signature avec une comparaison sûre au timing if (!crypto.timingSafeEqual(Buffer.from(hash, 'hex'), Buffer.from(expectedSignature, 'hex'))) { return res.status(401).send('Signature invalide'); } // Analyser et traiter le webhook vérifié const event = JSON.parse(req.body); console.log('Webhook Firecrawl vérifié :', event); res.status(200).send('ok');});app.listen(3000, () => console.log('Écoute sur le port 3000'));
import hmacimport hashlibfrom flask import Flask, request, abortapp = Flask(__name__)WEBHOOK_SECRET = 'your-webhook-secret-here' # À récupérer dans le tableau de bord Firecrawl@app.post('/webhook/firecrawl')def webhook(): signature = request.headers.get('X-Firecrawl-Signature') if not signature: abort(401, 'En-tête de signature manquant') # Extraire le hachage de l’en-tête de signature try: algorithm, hash_value = signature.split('=', 1) if algorithm != 'sha256': abort(401, 'Algorithme de signature non valide') except ValueError: abort(401, 'Format de signature non valide') # Calculer la signature attendue expected_signature = hmac.new( WEBHOOK_SECRET.encode('utf-8'), request.data, hashlib.sha256 ).hexdigest() # Vérifier la signature avec une comparaison à l’épreuve du timing if not hmac.compare_digest(hash_value, expected_signature): abort(401, 'Signature non valide') # Analyser et traiter le webhook vérifié event = request.get_json(force=True) print('Webhook Firecrawl vérifié :', event) return 'ok', 200if __name__ == '__main__': app.run(port=3000)
Vérifiez chaque requête. Vérifiez toujours la signature avant de traiter un payload de webhook. Rejetez toute requête qui échoue à la vérification avec un code d’état 401.
Utilisez des comparaisons à durée constante. La comparaison de chaînes standard peut révéler des informations temporelles. Utilisez crypto.timingSafeEqual() dans Node.js ou hmac.compare_digest() en Python.
Exposez votre point de terminaison en HTTPS. Cela garantit que les payloads de webhook sont chiffrés pendant le transit.
{"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":""},"feedback":{"thumbs":false,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af47e515a479f9a9dec73a0","clientVersion":"0.0.4111","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":67},{"language":"es","tag":"Referencia de la API","count":65},{"language":"fr","tag":"Référence de l’API","count":65},{"language":"ja","tag":"APIリファレンス","count":65},{"language":"pt-BR","tag":"Referência da API","count":65},{"language":"zh","tag":"API 参考","count":65},{"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":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instinct-self-updating-docs","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"li.navbar-link a[href*=\"firecrawl.dev/signin\"]{background-color:#ff4d00;color:#fff}li.navbar-link a[href*=\"firecrawl.dev/signin\"]:hover{background-color:#e64500}.dark li.navbar-link a[href*=\"firecrawl.dev/signin\"]{background-color:#ff4d00;color:#fff}.dark li.navbar-link a[href*=\"firecrawl.dev/signin\"]:hover{background-color:#e64500}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, 0.04) 0%, rgba(255, 77, 0, 0.02) 100%);border:1px solid rgba(255, 77, 0, 0.15);border-radius:12px;padding:20px}.firecrawl-cta-logo{height:20px;width:auto;object-fit:contain;margin-bottom:12px}.firecrawl-cta-logo-dark{display:none}.dark .firecrawl-cta-logo-light{display:none}.dark .firecrawl-cta-logo-dark{display:block}.firecrawl-cta-title{font-size:18px;font-weight:600;color:#111;margin:0 0 8px 0;line-height:1.3}.firecrawl-cta-description{font-size:13px;line-height:1.5;color:#666;margin:0 0 16px 0}.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:none!important;box-shadow:none!important;text-decoration:none!important;transition:background-color 0.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 0.2s ease, background-color 0.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, 0.08) 0%, rgba(255, 77, 0, 0.04) 100%);border-color:rgba(255, 77, 0, 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-primary:hover{background-color:#e64500}.dark .firecrawl-cta-btn-secondary{background-color:rgba(255, 255, 255, 0.05);border-color:rgba(255, 255, 255, 0.1);color:#ddd!important}.dark .firecrawl-cta-btn-secondary:hover{background-color:rgba(255, 255, 255, 0.1);border-color:rgba(255, 255, 255, 0.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 p,.fc-agent-first-header [data-as=\"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:transparent;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-client-tab:focus-visible,.fc-copy-button:focus-visible,.fc-install-button:focus-visible,.fc-agent-prompt-button:focus-visible,.fc-all-options-link: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{filter:invert(1) brightness(1.6)}.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{overflow:hidden;color:var(--fc-text);font-size:14px;line-height:20px;text-overflow:ellipsis;white-space:nowrap}.fc-client-tab-copy>span{overflow:hidden;color:var(--fc-text-muted);font-size:13px;line-height:18px;text-overflow:ellipsis;white-space:nowrap}.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:0.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:transparent;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{flex:none;color:var(--fc-text-muted);font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-size:13px;line-height:20px;user-select:none}.fc-command-scroll code{padding:0 20px 0 0;border:0;border-radius:0;background:transparent;color:var(--fc-text);font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;font-size:13px;line-height:20px;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:transparent;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{background:var(--fc-subtle-hover);color:var(--fc-text)}.fc-copy-button.is-copied{background:var(--fc-heat-soft);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;background:var(--fc-subtle-hover);color:var(--fc-text)!important;font-size:13px;font-weight:600;text-decoration:none!important;transition:background-color 160ms ease, transform 160ms ease}.fc-install-button:hover{background:var(--fc-heat-soft)}.fc-install-button:active,.fc-agent-prompt-button:active{transform:scale(0.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 0.75px 0.75px 0 rgba(0, 0, 0, 0.02),\n inset 0 0.25px 0.25px 0 rgba(0, 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, 0.08)}.dark .fc-agent-prompt-button:hover{background:rgba(255, 255, 255, 0.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-curvy-corners,.fc-curve{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:nth-last-child(-n+2):nth-child(odd),.fc-client-tab:last-child{border-bottom:0}.fc-client-panel{padding:16px 20px 20px}.fc-command-scroll code,.fc-command-prompt{font-size:12px}.fc-agent-first-footer{padding:14px 20px 18px}.fc-install-button,.fc-agent-prompt-button{width:100%}}@media (prefers-reduced-motion: reduce){.fc-agent-first *,.fc-agent-prompt *{scroll-behavior:auto!important;transition-duration:0.01ms!important}}"}],"page":{"pagePath":"fr/webhooks/security","slug":"/fr/webhooks/security","pageMetadata":{"title":"Sécurité","description":"Vérifiez l’authenticité des webhooks","og:title":"Sécurité des webhooks | Firecrawl","og:description":"Vérifiez l’authenticité des webhooks","icon":"shield-check","href":"/fr/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: \"Vérifiez l’authenticité des 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:`Vérifiez que chaque requête de webhook provient bien de Firecrawl en vérifiant sa signature HMAC-SHA256. Cela empêche les attaquants d’usurper des payloads et vous permet d’avoir confiance dans les données avant d’agir en conséquence.`}),`\n`,_jsx(Heading,{level:`2`,id:`secret-key`,children:`Clé secrète`}),`\n`,_jsxs(_components.p,{children:[`Le secret de votre webhook est disponible dans l’`,_jsx(_components.a,{href:`https://www.firecrawl.dev/app/settings?tab=advanced`,children:`onglet Avancé`}),` des paramètres de votre compte. Chaque compte dispose d’un secret unique utilisé pour signer toutes les requêtes webhook.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Gardez le secret de votre webhook en lieu sûr et ne l’exposez jamais publiquement. Si vous pensez\nque votre secret a été compromis, régénérez-le immédiatement depuis les paramètres\nde votre compte.`})}),`\n`,_jsx(Heading,{level:`2`,id:`signature-verification`,children:`Vérification de la signature`}),`\n`,_jsxs(_components.p,{children:[`Chaque requête de webhook inclut un en-tête `,_jsx(_components.code,{children:`X-Firecrawl-Signature`}),`\\xA0:`]}),`\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:`Comment vérifier`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Extraire la signature de l’en-tête `,_jsx(_components.code,{children:`X-Firecrawl-Signature`})]}),`\n`,_jsx(_components.li,{children:`Récupérer le corps brut de la requête (ne le parsez pas au préalable)`}),`\n`,_jsx(_components.li,{children:`Calculer le HMAC-SHA256 avec votre clé secrète`}),`\n`,_jsx(_components.li,{children:`Comparer les signatures à l’aide d’une fonction de comparaison à durée constante`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`implementation`,children:`Implémentation`}),`\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\":`#D4D4D4`},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\":`#D4D4D4`},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\":`#C586C0`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` app = express();`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Utiliser un parseur de corps brut pour vérifier la signature`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`app.use(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'/webhook/firecrawl'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, express.raw({ 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\":`#D4D4D4`},children:`app.post(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'/webhook/firecrawl'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, (req, res) => {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` signature = req.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`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` webhookSecret = process.env.FIRECRAWL_WEBHOOK_SECRET;`})]}),`\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:` (!signature || !webhookSecret) {`})]}),`\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\":`#D4D4D4`},children:` res.status(401).send(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Non autorisé'`}),_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:` // Extract hash from signature header`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Extraire le hash de l’en-tête de signature`})}),`\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:`#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\":`#D4D4D4`},children:` res.status(401).send(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Algorithme de signature invalide'`}),_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:` // Calculer la signature attendue`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` expectedSignature = crypto`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` .createHmac(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'sha256'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, webhookSecret)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` .update(req.body)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` .digest(`}),_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:` // Vérifier la signature avec une comparaison sûre au timing`})}),`\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:` (!crypto.timingSafeEqual(Buffer.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(hash, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'hex'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`), Buffer.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(expectedSignature, `}),_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\":`#D4D4D4`},children:` res.status(401).send(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Signature invalide'`}),_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:` // Analyser et traiter le webhook vérifié`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` event = JSON.parse(req.body);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` console.log(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Webhook Firecrawl vérifié :'`}),_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:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` res.status(200).send(`}),_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\":`#D4D4D4`},children:`app.listen(3000, () => console.log(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Écoute sur le port 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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`app = Flask(__name__)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`WEBHOOK_SECRET = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'your-webhook-secret-here'`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # À récupérer dans le tableau de bord Firecrawl`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`@app.post(`}),_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\":`#C586C0`},children:`def`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` webhook():`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` signature = 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\":`#C586C0`},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(401, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'En-tête de signature manquant'`}),_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:` # Extraire le hachage de l’en-tête de signature`})}),`\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 = signature.split(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'='`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, 1)`})]}),`\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:`#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(401, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Algorithme de signature non valide'`}),_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:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ValueError:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` abort(401, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Format de signature non valide'`}),_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:` # Calculer la signature attendue`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` expected_signature = hmac.new(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` WEBHOOK_SECRET.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:` # Vérifier la signature avec une comparaison à l’épreuve du timing`})}),`\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\":`#C586C0`},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(401, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Signature non valide'`}),_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:` # Analyser et traiter le webhook vérifié`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` event = request.get_json(force=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`True`}),_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:` print(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Webhook Firecrawl vérifié :'`}),_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:`, 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:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` __name__ == `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'__main__'`}),_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:` app.run(port=3000)`})}),`\n`]})})})]}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Bonnes pratiques`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Vérifiez chaque requête.`}),` Vérifiez toujours la signature avant de traiter un payload de webhook. Rejetez toute requête qui échoue à la vérification avec un code d’état `,_jsx(_components.code,{children:`401`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Utilisez des comparaisons à durée constante.`}),` La comparaison de chaînes standard peut révéler des informations temporelles. Utilisez `,_jsx(_components.code,{children:`crypto.timingSafeEqual()`}),` dans Node.js ou `,_jsx(_components.code,{children:`hmac.compare_digest()`}),` en Python.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Exposez votre point de terminaison en HTTPS.`}),` Cela garantit que les payloads de webhook sont chiffrés pendant le transit.`]}),`\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":"Sécurité","description":"Vérifiez l’authenticité des webhooks","og:title":"Sécurité des webhooks | Firecrawl","og:description":"Vérifiez l’authenticité des webhooks","icon":"shield-check","href":"/fr/webhooks/security"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Clé secrète","slug":"secret-key","depth":2,"children":[]},{"title":"Vérification de la signature","slug":"signature-verification","depth":2,"children":[{"title":"Comment vérifier","slug":"how-to-verify","depth":3,"children":[]},{"title":"Implémentation","slug":"implementation","depth":3,"children":[]}]},{"title":"Bonnes pratiques","slug":"best-practices","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/firecrawl/0081870911af9531/ready-to-build-cta.js","/_mintlify/custom/firecrawl/d82a383589d76971/chatbase-widget.js"],"subdomain":"firecrawl","siteName":"Firecrawl Docs","title":"Sécurité des webhooks | Firecrawl","navMaps":{"firstHrefInVersion":{"v2":{"href":"/fr/webhooks/security","matchLevel":0},"v1":{"href":"/fr/webhooks/security","matchLevel":0}},"firstHrefInLanguage":{"en":{"href":"/webhooks/security","matchLevel":1},"es":{"href":"/es/webhooks/security","matchLevel":1},"fr":{"href":"/fr/webhooks/security","matchLevel":0},"ja":{"href":"/ja/webhooks/security","matchLevel":1},"pt-BR":{"href":"/pt-BR/webhooks/security","matchLevel":1},"zh":{"href":"/zh/webhooks/security","matchLevel":1}}},"lastModified":"2026-09-27T17:30:03.875Z","originalFileLocation":"fr/webhooks/security.mdx","locale":"fr"},"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=\"Vérifiez l’authenticité des 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=\"Sécurité des webhooks | Firecrawl\">\u003cmeta data-mint-head property=\"og:description\" content=\"Vérifiez l’authenticité des webhooks\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Firecrawl Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.firecrawl.dev/fr/webhooks/security\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://firecrawl.mintlify.site/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=S%C3%A9curit%C3%A9\u0026amp;description=V%C3%A9rifiez+l%E2%80%99authenticit%C3%A9+des+webhooks\u0026amp;theme=6686a97727e4f15703abe779\u0026amp;signature=ea05398a247da7c1cc353669703d9643ba57404b6a1ddb40310169ded48d001d\">\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=\"Sécurité des webhooks | Firecrawl\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Vérifiez l’authenticité des webhooks\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://firecrawl.mintlify.site/_mintlify/api/og/v2?division=Webhooks\u0026amp;title=S%C3%A9curit%C3%A9\u0026amp;description=V%C3%A9rifiez+l%E2%80%99authenticit%C3%A9+des+webhooks\u0026amp;theme=6686a97727e4f15703abe779\u0026amp;signature=ea05398a247da7c1cc353669703d9643ba57404b6a1ddb40310169ded48d001d\">\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/fr/webhooks/security\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/fr/webhooks/security.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr\" href=\"https://docs.firecrawl.dev/fr/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=\"ja\" href=\"https://docs.firecrawl.dev/ja/webhooks/security\">\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=\"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/fr/webhooks/security#webpage\",\"url\":\"https://docs.firecrawl.dev/fr/webhooks/security\",\"name\":\"Sécurité\",\"description\":\"Vérifiez l’authenticité des webhooks\",\"dateModified\":\"2026-09-27T17:30:03.875Z\",\"isPartOf\":{\"@id\":\"https://docs.firecrawl.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.firecrawl.dev/fr/webhooks/security#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.firecrawl.dev/fr/webhooks/security#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Webhooks\",\"item\":\"https://docs.firecrawl.dev/fr/webhooks/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sécurité\",\"item\":\"https://docs.firecrawl.dev/fr/webhooks/security\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.firecrawl.dev/fr/webhooks/security#article\",\"headline\":\"Sécurité\",\"name\":\"Sécurité\",\"description\":\"Vérifiez l’authenticité des webhooks\",\"url\":\"https://docs.firecrawl.dev/fr/webhooks/security\",\"mainEntityOfPage\":{\"@id\":\"https://docs.firecrawl.dev/fr/webhooks/security#webpage\"},\"dateModified\":\"2026-09-27T17:30:03.875Z\",\"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\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Firecrawl Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/fr/webhooks/security.md","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","versions":[{"version":"v2","tabs":[{"tab":"Documentation","groups":[{"group":"Prise en main","pages":[{"title":"Introduction","href":"/fr/introduction"},{"title":"Firecrawl dans ChatGPT \u0026 Codex","sidebarTitle":"ChatGPT \u0026 Codex","icon":"https://mintlify.s3.us-west-1.amazonaws.com/firecrawl/images/agent-clients/codex.svg","href":"/fr/integrations/chatgpt-codex"},{"sidebarTitle":"Claude \u0026 Claude Code","title":"Firecrawl dans Claude \u0026 Claude Code","icon":"https://mintlify.s3.us-west-1.amazonaws.com/firecrawl/images/agent-clients/claude-ai.svg","href":"/fr/quickstarts/claude-code"},{"sidebarTitle":"Claude Desktop \u0026 Cowork","title":"Firecrawl dans Claude Desktop et Cowork","icon":"https://mintlify.s3.us-west-1.amazonaws.com/firecrawl/images/agent-clients/claude-ai.svg","href":"/fr/quickstarts/claude-desktop"},{"sidebarTitle":"Cursor","icon":"https://mintlify.s3.us-west-1.amazonaws.com/firecrawl/images/agent-clients/cursor.svg","title":"Recherche et scraping web MCP dans Cursor","href":"/fr/quickstarts/cursor"},{"group":"MCP","root":{"title":"Premiers pas","sidebarTitle":"Premiers pas","href":"/fr/mcp-server"},"pages":[{"title":"Premiers pas","sidebarTitle":"Premiers pas","href":"/fr/mcp-server"},{"title":"Pour les agents","sidebarTitle":"Pour les agents","href":"/fr/mcp-server/keyless"},{"title":"Pour les humains","sidebarTitle":"Pour les humains","href":"/fr/mcp-server/oauth"}]},{"title":"CLI","href":"/fr/sdks/cli"},{"title":"Guide avancé de scraping","href":"/fr/advanced-scraping-guide"},{"group":"Offres et facturation","pages":[{"title":"Facturation","href":"/fr/billing"},{"title":"Limites de débit","href":"/fr/rate-limits"},{"title":"Crédits partenaires","href":"/fr/partner-credits"}]},{"group":"Entreprise","pages":[{"title":"Enterprise","href":"/fr/enterprise"},{"title":"Présentation de la sécurité","href":"/fr/security"},{"title":"SSO et SCIM","href":"/fr/features/sso"},{"title":"Restrictions d’adresses IP","href":"/fr/features/ip-restrictions"},{"title":"Restrictions de clé","href":"/fr/features/key-restrictions"},{"title":"Protection contre les menaces","href":"/fr/features/threat-protection"},{"title":"Journalisation d’audit SIEM","href":"/fr/features/siem"}]}]},{"group":"Points de terminaison de base","pages":[{"group":"Recherche","icon":"magnifying-glass","pages":[{"title":"Recherche","icon":"magnifying-glass","href":"/fr/features/search"},{"title":"Extraits de recherche","icon":"highlighter","href":"/fr/features/search-highlights"},{"title":"Index de recherche","icon":"book-open","href":"/fr/features/research"},{"title":"Index Developer","icon":"code","href":"/fr/features/developer"},{"title":"Government Index","icon":"scale-balanced","href":"/fr/features/gov"}]},{"group":"Extraction","icon":"markdown","pages":[{"title":"Extraction","href":"/fr/features/scrape"},{"title":"Scraping plus rapide","href":"/fr/features/fast-scraping"},{"title":"Scrape par lots","href":"/fr/features/batch-scrape"},{"title":"Mode JSON - Résultat structuré","sidebarTitle":"Mode JSON","href":"/fr/features/llm-extract"},{"title":"Suivi des modifications","sidebarTitle":"Suivi des modifications","href":"/fr/features/change-tracking"},{"title":"Mode avancé","href":"/fr/features/enhanced-mode"},{"title":"Mode de verrouillage","href":"/fr/features/lockdown"},{"title":"Masquage des données personnelles identifiables (PII)","href":"/fr/features/pii-redaction"},{"title":"Proxys","href":"/fr/features/proxies"},{"title":"Analyse de documents","href":"/fr/features/document-parsing"}]},{"group":"Suivi","icon":"radar","pages":[{"title":"Monitoring","icon":"radar","href":"/fr/features/monitoring"},{"title":"surveillance de page","sidebarTitle":"Page","icon":"file-lines","href":"/fr/features/monitoring-page"},{"title":"Surveillance de site web","sidebarTitle":"Site web","icon":"spider","href":"/fr/features/monitoring-website"},{"title":"Surveillance à l'échelle de l'ensemble du web","sidebarTitle":"À l'échelle de tout le web","icon":"globe","href":"/fr/features/monitoring-web-scale"}]},{"group":"Interact / Browser Sandbox","icon":"hand-pointer","pages":[{"title":"Interact après le scraping","sidebarTitle":"Interact","icon":"hand-pointer","href":"/fr/features/interact"},{"title":"Browser Sandbox","icon":"browser","sidebarTitle":"Browser Sandbox","href":"/fr/features/browser"}]}]},{"group":"Plus","pages":[{"title":"Alexandria","icon":"books","href":"/fr/features/alexandria"},{"title":"Parse","icon":"file-magnifying-glass","version":"v2","sidebarTitle":"Parse","href":"/fr/features/parse"},{"title":"Cartographier","icon":"map","version":"v2","sidebarTitle":"Cartographier","href":"/fr/features/map"},{"title":"Crawl","icon":"spider","href":"/fr/features/crawl"},{"title":"Agent","sidebarTitle":"Agent","icon":"magic","href":"/fr/features/agent"}]},{"group":"Démarrages rapides","pages":[{"group":"Node.js","pages":[{"title":"Node.js","href":"/fr/quickstarts/nodejs"},{"title":"Next.js","href":"/fr/quickstarts/nextjs"},{"title":"Express","href":"/fr/quickstarts/express"},{"title":"NestJS","href":"/fr/quickstarts/nestjs"},{"title":"Fastify","href":"/fr/quickstarts/fastify"},{"title":"Hono","href":"/fr/quickstarts/hono"},{"title":"Bun","href":"/fr/quickstarts/bun"},{"title":"Remix","href":"/fr/quickstarts/remix"},{"title":"Nuxt","href":"/fr/quickstarts/nuxt"},{"title":"SvelteKit","href":"/fr/quickstarts/sveltekit"},{"title":"Astro","href":"/fr/quickstarts/astro"},{"title":"Mastra","href":"/fr/quickstarts/mastra"}]},{"group":"Serverless","pages":[{"title":"Cloudflare Workers","href":"/fr/quickstarts/cloudflare-workers"},{"title":"Fonctions Vercel","href":"/fr/quickstarts/vercel-functions"},{"title":"Vercel Marketplace","href":"/fr/quickstarts/vercel-marketplace"},{"title":"AWS Lambda","href":"/fr/quickstarts/aws-lambda"},{"title":"Fonctions Edge de Supabase","href":"/fr/quickstarts/supabase-edge-functions"},{"title":"Deno Deploy","href":"/fr/quickstarts/deno-deploy"}]},{"group":"PHP","pages":[{"title":"PHP","href":"/fr/quickstarts/php"},{"title":"Laravel","href":"/fr/quickstarts/laravel"}]},{"group":"Ruby","pages":[{"title":"Ruby","href":"/fr/quickstarts/ruby"},{"title":"Rails","href":"/fr/quickstarts/rails"}]},{"group":"Python","pages":[{"title":"Python","href":"/fr/quickstarts/python"},{"title":"FastAPI","href":"/fr/quickstarts/fastapi"},{"title":"Django","href":"/fr/quickstarts/django"},{"title":"Flask","href":"/fr/quickstarts/flask"}]},{"title":"Go","href":"/fr/quickstarts/go"},{"title":"Rust","href":"/fr/quickstarts/rust"},{"title":"Elixir","href":"/fr/quickstarts/elixir"},{"group":"Java","pages":[{"title":"Java","href":"/fr/quickstarts/java"},{"title":"Spring Boot","href":"/fr/quickstarts/spring-boot"}]},{"group":".NET","pages":[{"title":".NET","href":"/fr/quickstarts/dotnet"},{"title":"ASP.NET Core","href":"/fr/quickstarts/aspnet-core"}]}]},{"group":"Guides développeur","pages":[{"title":"Modèles full stack","icon":"star","href":"/fr/developer-guides/examples"},{"group":"Guides d'utilisation","icon":"compass","pages":[{"title":"Choisir l’extracteur de données","sidebarTitle":"Choisir l’extracteur de données","href":"/fr/developer-guides/usage-guides/choosing-the-data-extractor"},{"title":"Vérifier la fraîcheur et l’activité","sidebarTitle":"Vérifier la fraîcheur et l’activité","href":"/fr/developer-guides/usage-guides/verifying-freshness-and-liveness"}]},{"group":"SDKs et frameworks LLM","icon":"puzzle-piece","pages":[{"title":"OpenAI","href":"/fr/developer-guides/llm-sdks-and-frameworks/openai"},{"title":"Anthropic","href":"/fr/developer-guides/llm-sdks-and-frameworks/anthropic"},{"title":"Gemini","href":"/fr/developer-guides/llm-sdks-and-frameworks/gemini"},{"title":"Agent Development Kit (ADK)","href":"/fr/developer-guides/llm-sdks-and-frameworks/google-adk"},{"title":"Ancrer Gemini sur Vertex AI avec la recherche Firecrawl","href":"/fr/developer-guides/llm-sdks-and-frameworks/vertex-ai-grounding"},{"title":"Vercel AI SDK","href":"/fr/developer-guides/llm-sdks-and-frameworks/vercel-ai-sdk"},{"title":"LangChain","href":"/fr/developer-guides/llm-sdks-and-frameworks/langchain"},{"title":"LangGraph","href":"/fr/developer-guides/llm-sdks-and-frameworks/langgraph"},{"title":"LlamaIndex","href":"/fr/developer-guides/llm-sdks-and-frameworks/llamaindex"},{"title":"Mastra","href":"/fr/developer-guides/llm-sdks-and-frameworks/mastra"},{"title":"ElevenAgents","href":"/fr/developer-guides/llm-sdks-and-frameworks/elevenagents"},{"title":"Jev","href":"/fr/developer-guides/llm-sdks-and-frameworks/jev"}]},{"group":"Guides pratiques","icon":"book","pages":[{"title":"Créer un assistant de recherche IA avec Firecrawl et l’AI SDK","href":"/fr/developer-guides/cookbooks/ai-research-assistant-cookbook"},{"title":"Créer un générateur de charte graphique de marque avec Firecrawl","href":"/fr/developer-guides/cookbooks/brand-style-guide-generator-cookbook"}]},{"group":"Plateformes et frameworks","icon":"puzzle-piece","pages":[{"title":"Agent Hermes","href":"/fr/integrations/hermes"},{"title":"Replit","href":"/fr/integrations/replit"},{"title":"Lovable","href":"/fr/integrations/lovable"},{"title":"Stripe Projects","href":"/fr/integrations/stripe-projects"},{"title":"LangChain","href":"/fr/integrations/langchain"},{"title":"LlamaIndex","href":"/fr/integrations/llamaindex"},{"title":"CrewAI","href":"/fr/integrations/crewai"},{"title":"Camel AI","href":"/fr/integrations/camelai"},{"title":"Praison AI","href":"/fr/integrations/praison"},{"title":"Neuron AI","href":"/fr/integrations/neuron-ai"},{"title":"Dify","href":"/fr/integrations/dify"},{"title":"Langflow","href":"/fr/integrations/langflow"},{"title":"Flowise","href":"/fr/integrations/flowise"},{"title":"Zapier","href":"/fr/integrations/zapier"},{"title":"Make","href":"/fr/integrations/make"},{"title":"n8n","href":"/fr/integrations/n8n"},{"title":"Tines","href":"/fr/integrations/tines"},{"title":"Pipedream","href":"/fr/integrations/pipedream"},{"title":"Composio","href":"/fr/integrations/composio"}]}]},{"group":"Webhooks","pages":[{"title":"Vue d’ensemble","icon":"link","href":"/fr/webhooks/overview"},{"title":"Types d’événements","description":"Référence des événements webhook","icon":"bolt","href":"/fr/webhooks/events"},{"title":"Sécurité","icon":"shield-check","href":"/fr/webhooks/security"},{"title":"Tests","description":"Tester et déboguer des webhooks","icon":"bug","href":"/fr/webhooks/testing"}]},{"group":"Cas d'utilisation","pages":[{"title":"Cas d’utilisation","sidebarTitle":"Aperçu","icon":"sparkles","href":"/fr/use-cases/overview"},{"title":"Plateformes d’IA","sidebarTitle":"Plateformes d’IA","icon":"robot","href":"/fr/use-cases/ai-platforms"},{"title":"Enrichissement de leads","sidebarTitle":"Enrichissement de leads","icon":"user-plus","href":"/fr/use-cases/lead-enrichment"},{"title":"Plateformes SEO","sidebarTitle":"Plateformes SEO","icon":"magnifying-glass","href":"/fr/use-cases/seo-platforms"},{"title":"Recherche approfondie","sidebarTitle":"Recherche approfondie","icon":"microscope","href":"/fr/use-cases/deep-research"},{"group":"Voir plus","pages":[{"title":"Produit et e-commerce","sidebarTitle":"Produit et e-commerce","icon":"cart-shopping","href":"/fr/use-cases/product-ecommerce"},{"title":"Génération de contenu","sidebarTitle":"Génération de contenu","icon":"pen","href":"/fr/use-cases/content-generation"},{"title":"Développeurs \u0026 MCP","sidebarTitle":"Développeurs \u0026 MCP","icon":"code","href":"/fr/use-cases/developers-mcp"},{"title":"Investissement \u0026 Finance","sidebarTitle":"Investissement \u0026 Finance","icon":"chart-line","href":"/fr/use-cases/investment-finance"},{"title":"Veille concurrentielle","sidebarTitle":"Veille concurrentielle","icon":"binoculars","href":"/fr/use-cases/competitive-intelligence"},{"title":"Migration de données","sidebarTitle":"Migration de données","icon":"arrows-rotate","href":"/fr/use-cases/data-migration"},{"title":"Observabilité et supervision","sidebarTitle":"Observabilité","icon":"chart-mixed","href":"/fr/use-cases/observability"}]}]},{"group":"Autres","pages":[{"title":"Vue d’ensemble","href":"/fr/dashboard"},{"title":"Déboguer Firecrawl avec Ask","sidebarTitle":"Déboguer avec Ask","icon":"messages-question","href":"/fr/features/ask"}]},{"group":"Contribuer","pages":[{"title":"Open source ou Firecrawl Cloud","sidebarTitle":"Open Source vs Cloud","href":"/fr/contributing/open-source-or-cloud"},{"title":"Configuration pour les contributeurs de Firecrawl","sidebarTitle":"Configuration contributeur","href":"/fr/contributing/guide"},{"title":"Auto-hébergement de Firecrawl","sidebarTitle":"Auto-hébergement","href":"/fr/contributing/self-host"}]}]},{"tab":"SDKs","pages":[{"title":"SDKs","href":"/fr/sdks/overview"}]},{"tab":"Référence de l’API","pages":[{"title":"Référence de l’API","href":"/fr/api-reference/v2-introduction"}]},{"tab":"Créer avec l’IA","pages":[{"title":"Créer avec l’IA","href":"/fr/ai-onboarding"}]}]},{"version":"v1","hidden":true,"tabs":[{"tab":"Documentation","hidden":true,"searchable":true,"groups":[{"group":"Démarrage rapide","pages":[{"title":"Introduction","description":"L’API de contexte pour les agents IA. Recherchez sur le web, extrayez n’importe quelle page et interagissez avec elle via une seule API.","href":"/fr/introduction"},{"title":"Premiers pas","description":"Configurez Firecrawl MCP avec un accès sans clé, une connexion à un compte ou une clé API.","sidebarTitle":"Premiers pas","href":"/fr/mcp-server"},{"title":"Guide avancé de scraping","description":"Configurez les options de scraping, les actions du navigateur, le crawl, la cartographie et le point de terminaison de l'agent grâce à l’ensemble de la surface de l’API Firecrawl.","href":"/fr/advanced-scraping-guide"},{"group":"Offres et facturation","pages":[{"title":"Facturation","description":"Fonctionnement de la facturation, des crédits et des offres Firecrawl","href":"/fr/billing"},{"title":"Limites de débit","description":"Limites de débit selon les forfaits et les requêtes API","href":"/fr/rate-limits"},{"title":"Crédits partenaires","description":"Comment fonctionnent les crédits partenaires Firecrawl, notamment les conditions d’éligibilité, leur expiration et les limites de l’offre","href":"/fr/partner-credits"}]},{"group":"Entreprise","pages":[{"title":"Enterprise","description":"Offres Enterprise, sécurité et fonctionnalités de Firecrawl à grande échelle","href":"/fr/enterprise"},{"title":"Présentation de la sécurité","description":"Comment Firecrawl protège vos données : conservation zéro des données, DPA, SSO, contrôles d’accès et résidence des données, réunis en un seul endroit pour votre évaluation de sécurité.","href":"/fr/security"},{"title":"SSO et SCIM","description":"Configurez l’authentification unique (SSO) et la synchronisation d’annuaire SCIM pour que votre équipe se connecte via votre provider d’identité et que les accès des utilisateurs restent synchronisés avec votre annuaire.","href":"/fr/features/sso"},{"title":"Restrictions d’adresses IP","description":"Restreignez les clés API de votre équipe à une liste d’autorisation d’adresses IP ou de plages CIDR, afin qu’elles ne fonctionnent que depuis des réseaux approuvés. Contrôle appliqué côté serveur.","href":"/fr/features/ip-restrictions"},{"title":"Restrictions de clé","description":"Verrouillez une clé API individuelle sur des formats de sortie et des points de terminaison spécifiques. Appliqué côté serveur, sans possibilité pour une requête de passer outre.","href":"/fr/features/key-restrictions"},{"title":"Protection contre les menaces","description":"Bloquez les requêtes vers des URL à risque sur tous les points de terminaison, à l’aide d’une politique contrôlée par votre organisation. Appliquée côté serveur.","href":"/fr/features/threat-protection"},{"title":"Journalisation d’audit SIEM","description":"Envoyez un événement d’audit structuré à votre SIEM pour chaque extraction effectuée par votre équipe, en commençant par Microsoft Sentinel. Livraison côté serveur.","href":"/fr/features/siem"}]}]},{"group":"Nouvelles fonctionnalités","pages":[{"group":"Agent","icon":"magic","hidden":true,"pages":[]}]},{"group":"Fonctionnalités de base","pages":[{"group":"Extraction","icon":"markdown","pages":[{"title":"Extraction","description":"Transformez n'importe quelle URL en markdown propre ou en données structurées","href":"/fr/features/scrape"},{"title":"Scraping plus rapide","description":"Accélérez vos scrapes de 500 % grâce au paramètre maxAge","href":"/fr/features/fast-scraping"},{"title":"Scrape par lots","description":"Scraper plusieurs URL en une seule tâche par lots","href":"/fr/features/batch-scrape"},{"title":"Mode JSON - Résultat structuré","description":"Extraire des données structurées à partir de pages via des LLM","sidebarTitle":"Mode JSON","href":"/fr/features/llm-extract"},{"title":"Suivi des modifications","description":"Détecter et surveiller les changements dans le contenu web entre les extractions","sidebarTitle":"Suivi des modifications","href":"/fr/features/change-tracking"},{"title":"Mode avancé","description":"Utilisez des proxies avancés pour un scraping fiable sur des sites complexes","href":"/fr/features/enhanced-mode"},{"title":"Proxys","description":"Découvrez les types de proxy, les emplacements et la façon dont Firecrawl sélectionne des proxy pour vos requêtes.","href":"/fr/features/proxies"}]},{"title":"Crawl","description":"Crawler récursivement un site web et obtenir le contenu de chaque page","icon":"spider","href":"/fr/features/crawl"},{"title":"Cartographier","description":"Indiquez un site web et récupérez toutes ses URL — ultra rapide","icon":"map","version":"v2","sidebarTitle":"Cartographier","href":"/fr/features/map"},{"title":"Recherche","description":"Recherchez sur le web et obtenez le contenu complet des résultats","icon":"magnifying-glass","href":"/fr/features/search"}]},{"group":"Webhooks","pages":[{"title":"Vue d’ensemble","description":"Notifications en temps réel pour vos opérations Firecrawl","icon":"link","href":"/fr/webhooks/overview"},{"title":"Types d’événements","description":"Référence des événements webhook","icon":"bolt","href":"/fr/webhooks/events"},{"title":"Sécurité","icon":"shield-check","href":"/fr/webhooks/security"},{"title":"Tests","description":"Tester et déboguer des webhooks","icon":"bug","href":"/fr/webhooks/testing"}]},{"group":"Tableau de bord","pages":[{"title":"Vue d’ensemble","description":"Vue d’ensemble du dashboard Firecrawl et de ses principales fonctionnalités","href":"/fr/dashboard"}]}]},{"tab":"SDKs","hidden":true,"searchable":true,"pages":[{"title":"SDKs","href":"/fr/sdks/overview"}]},{"tab":"Intégrations","href":"https://www.firecrawl.dev/app"},{"tab":"Référence de l’API","pages":[{"title":"Référence de l’API","href":"/fr/v1/api-reference/introduction"}]}]}],"global":{"anchors":[{"anchor":"Sandbox","icon":"play","href":"https://firecrawl.dev/playground"},{"anchor":"Blog","icon":"newspaper","href":"https://firecrawl.dev/blog"},{"anchor":"Communauté","icon":"comment-dots","href":"https://community.firecrawl.dev/"},{"anchor":"Journal des modifications","icon":"list","href":"https://firecrawl.dev/changelog"}]}},{"language":"ja","pages":[{"title":"ja","href":"/ja/webhooks/security"}]},{"language":"pt-BR","pages":[{"title":"pt-BR","href":"/pt-BR/webhooks/security"}]},{"language":"zh","pages":[{"title":"zh","href":"/zh/webhooks/security"}]}]},"basePath":"","title":"Sécurité des webhooks | Firecrawl","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":[],"chunks":[]}