{"name":"BatiScrap API","version":"2.0.0","description":"Catalogue produit centralise avec crawl serveur et worker Chrome","captureExecution":{"mode":"extension_worker_only","serverExecutionEnabled":false,"description":"Le serveur decouvre les URL et prepare la file; seule l'extension Chrome charge et capture les pages produit."},"endpoints":{"public":{"GET /v1/products":"Liste des produits (paginee, filtrable)","GET /v1/products/search?q=":"Recherche full-text","GET /v1/products/categories":"Liste des categories","GET /v1/products/statistics":"Statistiques globales","GET /v1/products/:sku":"Detail d'un produit"},"admin":{"GET /auth/batitool/start":"Demarrer le SSO officiel BatiTool","GET /auth/batitool/callback":"Finaliser le SSO et creer une session dashboard","GET /auth/me":"Verifier la session dashboard","POST /auth/logout":"Fermer la session dashboard","GET /admin/status":"Statut de la base","POST /admin/crawl/start":"Demarrer crawl architecture (materiaux)","POST /admin/crawl/pause":"Pause/reprise crawl","POST /admin/crawl/stop":"Arreter crawl","GET /admin/crawl/status":"Statut crawl","GET /admin/crawl/tree?runId=":"Arbre crawl versionne","GET /admin/crawl/runs":"Historique des crawls","DELETE /admin/crawl/runs/:id":"Supprimer un run crawl","GET /admin/crawl/product-urls?runId=":"URLs produits d un run de crawl","POST /admin/crawl/import-sitemap":"Importer un fichier sitemap local et generer un run sans crawl reseau","GET /admin/crawl/schedules":"Liste des planifications crawl","POST /admin/crawl/schedules":"Creer une planification crawl","PATCH /admin/crawl/schedules/:id":"Modifier une planification crawl","DELETE /admin/crawl/schedules/:id":"Supprimer une planification crawl","GET /admin/scrape/status":"Lire la progression de la file du worker extension (lecture seule)","POST /admin/scrape/worker/prepare":"Preparer la file persistante du worker extension depuis une map crawl","GET /admin/scrape/map?crawlRunId=":"Recuperer la map scrape sauvegardee d un run crawl","POST /admin/scrape/map/generate":"Generer ou regenerer (from zero) la map scrape et la sauvegarder","POST /admin/scrape/map/status":"Enregistrer un resultat worker dans la map","GET /admin/scrape/live-diff":"Diff temps reel","POST /admin/scrape/apply-diff":"Appliquer diff valide","POST /admin/scrape/reject-diff":"Rejeter diff","GET /admin/scrape/runs":"Historique des runs de capture et revision","GET /admin/extension/info":"Informations sur le paquet extension Chrome","GET /admin/extension/download":"Telecharger la derniere extension Chrome au format ZIP","GET /admin/api-keys":"Lister les API Keys","POST /admin/api-keys":"Creer une API Key","PATCH /admin/api-keys/:id":"Modifier une API Key","DELETE /admin/api-keys/:id":"Supprimer une API Key","POST /admin/products":"Creer un produit","PUT /admin/products/:sku":"Modifier un produit","POST /admin/products/import":"Import batch"},"health":{"GET /health":"Health check"}},"authentication":"Les routes machine utilisent X-API-Key; le dashboard utilise le SSO BatiTool et un cookie HttpOnly local revocable."}