Le scan de conformité UE API.
Envoyez une seule requête GET avec une URL et recevez neuf contrôles techniques GDPR, NIS2, DORA et EAA au format JSON. N'importe quel CMS, n'importe quelle pile. Aucune clé, aucun quota à acheter, aucun compte.
Envoyer une requête Essayez dans le navigateurUn appel analyse un site
C'est toute l'interface. L'URL est le seul paramètre, et elle fonctionne avec ou sans schéma.
# One GET request. That is the entire API.
curl "https://eucomply-scan.mahope-eeb.workers.dev/scan?url=webflow.com"
Vous préférez envoyer un corps, ou votre URL est plus longue qu'une chaîne de requête ? POST prend le même url champ au format JSON.
curl -X POST "https://eucomply-scan.mahope-eeb.workers.dev/scan" \
-H "Content-Type: application/json" \
-d '{"url":"https://webflow.com"}'
En Python, avec rien d'autre que la bibliothèque standard :
import json, urllib.parse, urllib.request
API = "https://eucomply-scan.mahope-eeb.workers.dev"
def scan(url):
qs = urllib.parse.urlencode({"url": url})
with urllib.request.urlopen(f"{API}/scan?{qs}") as response:
return json.load(response)
report = scan("webflow.com")
print(report["platform"], report["score"])
for name, check in report["checks"].items():
print(("PASS" if check["pass"] else "FAIL"), name, "-", check["label"])
CORS est ouvert, donc cela fonctionne aussi directement depuis un navigateur — aucun proxy requis. Vérifié : une requête preflight pour GET renvoie Access-Control-Allow-Origin: *.
Ce qui revient
Un 200 avec un seul objet JSON. Chaque champ mesuré sur le service en production le 28 septembre 2026 :
| Field | Type | Ce qu'il contient |
|---|---|---|
url | string | L'URL telle qu'elle a été résolue, après les redirections. |
platform | string | Plateforme détectée, par ex. Webflow, Shopify, WordPress. |
scannedAt | string | Horodatage ISO 8601 du scan. |
durationMs | number | Durée du scan. |
score | object | passed, total, pct sur les neuf contrôles. |
checks | object | Neuf entrées, indexées par identifiant de contrôle. Chacune a pass, warn, label, detail, fix. |
disclaimer | string | Envoyé avec chaque réponse. Laissez-le visible — c'est la ligne qui empêche qu'on y lise un avis juridique. |
Un contrôle qui échoue est la partie utile : en voici un renvoyé mot pour mot, réduit à ses trois premiers champs :
"consent_mode_v2": {
"pass": false,
"warn": false,
"label": "No Google Consent Mode v2 detected",
"detail": "No Consent Mode v2 signals found. Since March 2024, Google requires Consent Mode v2 for ad personalization in the EEA. Without it, Google Ads conversion tracking may be restricted.",
Une différence honnête avec la CLI
Le JSON score divise les contrôles réussis par les neuf, y compris les quatre qui ne concernent que certains sites — cookies, publicité programmatique, Google Ads, DORA. Un site qui a tout fait correctement pour son type peut afficher un nombre moyen.
La CLI est la version qui fait cette répartition, et elle indique quels contrôles elle n'a pas comptés et pourquoi. Si le nombre compte plus que la forme du JSON, utilisez la CLI. Cette API est actuellement servie par une version plus ancienne du même moteur que celle du dépôt : elle ne renvoie donc pas encore cette répartition.
Les trois autres points de terminaison
Tous sont sans authentification et CORS ouvert, comme /scan.
GET/stats
Renvoie scans et les vingt hôtes les plus analysés. Nos propres domaines de test ne sont pas dans la liste.
Ne lisez pas cela comme un nombre d'utilisateurs. Le compteur est incrémenté par nos propres exécutions de test automatisées autant que par les visiteurs — mesuré le 28 septembre 2026, environ les trois quarts du total venaient d'exécutions automatisées contre des adresses IP réservées. C'est un test de disponibilité, pas une preuve de popularité.
POST/subscribe
Enregistre une adresse e-mail pour les mises à jour de conformité. Corps : email, facultativement url, score, source.
Renvoie 400 pour une adresse mal formée et 422 pour un domaine de test ou jetable : les exécutions de test n'arrivent donc jamais dans la liste.
GET/config
Configuration publique du runtime. Les URL de paiement qu'elle contient sont vides en production, c'est délibéré : le site code les liens du contrat en dur et les pages de paiement ne dépendent pas d'une variable du worker.
Limites et erreurs
Pas de clé, pas de compte, et une limite qui compte : 10 requests per minute per IP, comptée côté serveur.
| Status | Quand vous l'obtenez | Body |
|---|---|---|
400 | Aucun url paramètre | {"error": "Please provide a valid public http(s) URL, e.g. ?url=example.com"} |
404 | Toute autre route que les quatre ci-dessus | {"error": "Not found. Use GET /scan?url=example.com"} |
422 | /subscribe avec une adresse de test | {"error": "Test address rejected."} |
429 | Plus de 10 requêtes en une minute depuis une IP | {"error": "Rate limit reached. Try again in a few minutes."} |
502 | Le site visé n'a pas pu être lu | {"error": "Scan failed: ..."} |
Un 502 signifie que le site interrogé a échoué, pas l'API. La réponse contient le message d'origine : lisez-le avant de réessayer — un hôte derrière un mur anti-bot échouera toujours, et insister n'aide pas.
Ce que cette API ne fait pas
C'est une seule requête pour un seul site à un seul instant. Elle ne garde aucun historique, ne s'exécute pas selon un calendrier, n'envoie aucun webhook et n'accepte aucun paiement. Si vous avez besoin de l'un de ces éléments, le produit payant actuel est l'extension WordPress : elle réanalyse votre propre site une fois par jour, conserve les 12 derniers scans, vous envoie un e-mail quand un contrôle casse, et génère un rapport HTML que vous pouvez envoyer à un client. La supervision hébergée n'en fait pas partie.
Les neuf contrôles sont des signaux techniques lus dans le HTML servi. Le contrôle DORA cherche des marqueurs publics dans le texte de la page et n'est aucune évaluation.
Besoin d'historique, de planification et d'un rapport ?
L'API ci-dessus reste gratuite. Pro est une licence de l'extension WordPress : réanalyses quotidiennes dans votre propre WordPress, les 12 derniers scans conservés, un e-mail quand un contrôle casse, et un rapport HTML du dernier scan. Elle débloque aussi les modèles de documents HTML modifiables.
Acheter Pro — 79 $/an par site →