{"name":"France Cyberwatch API","description":"API publique en lecture seule sur le dossier France Cyberwatch 2025—2026. CORS ouvert, cache en edge, pas de clé. Documentation : /docs et /fr/docs. MCP Streamable HTTP : POST /mcp.","docs":"https://cyberwatch-france.vercel.app/fr/docs","mcp":{"url":"https://cyberwatch-france.vercel.app/mcp","transport":"streamable-http","docs":"https://cyberwatch-france.vercel.app/fr/docs#mcp","webmcp":"https://cyberwatch-france.vercel.app/fr/docs#webmcp"},"project":"France Cyberwatch 2025-2026","reviewedThrough":"2026-08-16","schemaVersion":"1.3.0","scope":{"en":"Curated public-interest dataset of major publicly reported cyberattacks and data breaches affecting French public institutions and companies in 2025 and 2026. It is not a complete register. Unknown or disputed victim counts are not converted into confirmed statistics.","fr":"Jeu de données d’intérêt public sur les principales cyberattaques et fuites de données rendues publiques touchant des institutions publiques et des entreprises françaises en 2025 et 2026. Il ne constitue pas un registre exhaustif. Les nombres de victimes inconnus ou contestés ne sont pas convertis en statistiques confirmées."},"methodology":{"en":"Prefer official disclosures. Keep unknown values as null. Keep disputed attacker claims in labels or notes rather than numeric fields used for charts. Do not attribute attackers unless public evidence supports the attribution.","fr":"Privilégier les communiqués officiels. Conserver les valeurs inconnues à null. Garder les revendications contestées dans les libellés ou notes plutôt que dans les champs numériques utilisés pour les graphiques. Ne pas attribuer une attaque sans éléments publics suffisants."},"rules":{"affectedCounts":{"en":"Plot only incidents where affected is a non-null numeric value.","fr":"Ne représenter que les incidents dont le champ affected est une valeur numérique non nulle."},"unknownCounts":{"en":"Display as Unknown / under investigation, never as zero.","fr":"Afficher comme Inconnu / sous enquête, jamais comme zéro."},"disputedClaims":{"en":"Do not include disputed attacker-claimed victim counts in aggregate charts.","fr":"Ne pas inclure les nombres de victimes revendiqués et contestés dans les graphiques agrégés."}},"counts":{"incidents":14,"sources":60,"patterns":6},"conventions":{"affected":"Un `affected` null signifie que le chiffre est inconnu ou non publié. Ce n’est jamais 0. Ne le sommez pas, ne le représentez pas comme une absence, et ne traitez pas une cellule CSV vide comme un incident sans victime.","disputed":"Un incident au statut \"disputed\" est une violation réelle dont l’ampleur annoncée est contestée. Les chiffres revendiqués par les attaquants restent dans le texte `affectedLabel`, jamais dans le champ numérique, jamais dans un agrégat.","attribution":"Les attaquants ne sont nommés que lorsque la source citée le permet. N’inférez pas un groupe à partir de la méthode ou du secteur.","scope":"Il s’agit d’un ensemble curaté d’incidents majeurs rendus publics, pas de toutes les violations en France. Citez le `sourceUrl` original de chaque fiche."},"endpoints":[{"path":"/api","description":"Index auto-descriptif : conventions, chaque endpoint, paramètres et exemples. Passez `?lang=fr` pour le texte français. La doc HTML reste sur /docs.","query":{"lang":"en | fr"},"examples":["https://cyberwatch-france.vercel.app/api","https://cyberwatch-france.vercel.app/api?lang=fr"]},{"path":"/api/incidents","description":"Lister et rechercher les incidents. Le JSON inclut le `detail` localisé complet sur chaque ligne (contrairement à MCP `list_incidents`, qui renvoie des lignes compactes). Les effectifs inconnus se trient en dernier avec `sort=affected`, jamais comme zéro. Le CSV laisse la cellule affected vide. Le flux et les routes llms acceptent aussi `?lang=fr`.","query":{"q":"Recherche plein texte sur l’organisation, le secteur, la méthode, les données, le risque, la confiance, la source et les champs longs de la fiche.","kind":"government | company","severity":"critical | high | medium | low","status":"confirmed | disputed | unknown","sector":"Nom exact du secteur, insensible à la casse.","year":"ex. 2026","from":"Date ISO, borne inférieure inclusive.","to":"Date ISO, borne supérieure inclusive.","sort":"date | affected | org (date par défaut)","order":"desc | asc (desc par défaut)","limit":"1–200, 100 par défaut","offset":"0 par défaut","format":"json | csv","lang":"en | fr"},"examples":["https://cyberwatch-france.vercel.app/api/incidents?kind=government&severity=critical","https://cyberwatch-france.vercel.app/api/incidents?q=iban&lang=fr","https://cyberwatch-france.vercel.app/api/incidents?year=2026&sort=affected&format=csv"]},{"path":"/api/incidents/{id}","description":"Un incident avec son `detail` localisé (lead, timeline, how, taken, notTaken, impact, response, methodDisclosure, revision et quotes optionnels) plus `lastResearched`, `source` et `sources`. Chaque source a un `kind` (primary | official | secondary), un `publisher` et un `published` optionnel. Un identifiant inconnu renvoie 404 et la liste des identifiants valides. Pas de CSV ici ; le CSV de la liste reste compact et laisse `affected` inconnu vide.","query":{"lang":"en | fr"},"examples":["https://cyberwatch-france.vercel.app/api/incidents/ants"]},{"path":"/api/summary","description":"Chiffres nationaux ANSSI et CNIL, plus les décomptes issus de cette liste. Les agrégats n’incluent jamais les inconnus ni les revendications d’attaquants contestées.","query":{"lang":"en | fr"},"examples":["https://cyberwatch-france.vercel.app/api/summary","https://cyberwatch-france.vercel.app/api/summary?lang=fr"]},{"path":"/api/sources","description":"Toutes les sources, avec `kind` (primary | official | secondary), `publisher`, date `published` optionnelle, et les incidents qui les citent.","examples":["https://cyberwatch-france.vercel.app/api/sources"]},{"path":"/api/patterns","description":"Faiblesses récurrentes et la mesure prioritaire pour chacune.","query":{"lang":"en | fr"},"examples":["https://cyberwatch-france.vercel.app/api/patterns?lang=fr"]},{"path":"/api/recommendations","description":"Recommandations pour les organisations et le grand public. Les fiches grand public incluent explainerSlug lorsqu’un guide /learn existe.","query":{"audience":"organizations | public","lang":"en | fr"},"examples":["https://cyberwatch-france.vercel.app/api/recommendations?audience=public&lang=fr"]}],"ids":["dgfip","sante","ceva","edustaff","ants","edustudents","educompas","ficoba","interior","eurofiber","weda","airfrance","bouygues","orange"]}