EU-compliance-scanneren API.
Send én GET-anmodning med en URL, og få ni tekniske tjek for GDPR, NIS2, DORA og EAA tilbage som JSON. Ethvert CMS, enhver stack. Ingen nøgle, ingen kvota at købe, ingen konto.
Send en anmodning Prøv det i browserenÉt kald scanner ét site
Det er hele grænsefladen. URL'en er den eneste parameter, og den virker med eller uden skema.
# One GET request. That is the entire API.
curl "https://eucomply-scan.mahope-eeb.workers.dev/scan?url=webflow.com"
Foretrækker du at sende en body, eller skal din URL være længere end en query-streng? POST tager det samme url felt som JSON.
curl -X POST "https://eucomply-scan.mahope-eeb.workers.dev/scan" \
-H "Content-Type: application/json" \
-d '{"url":"https://webflow.com"}'
I Python, med intet ud over standardbiblioteket:
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 er åben, så det også virker direkte fra en browser — ingen proxy nødvendig. Verificeret: en preflight for GET returnerer Access-Control-Allow-Origin: *.
Hvad der kommer tilbage
Et 200-svar med ét JSON-objekt. Alle felter målt mod den kørende tjeneste den 28. september 2026:
| Field | Type | Hvad det rummer |
|---|---|---|
url | string | URL'en som den blev fundet, efter redirects. |
platform | string | Fundet platform, fx Webflow, Shopify, WordPress. |
scannedAt | string | ISO 8601-tidsstempel for scanningen. |
durationMs | number | Hvor længe scanningen tog. |
score | object | passed, total, pct over alle ni tjek. |
checks | object | Ni poster, med tjek-id som nøgle. Hver har pass, warn, label, detail, fix. |
disclaimer | string | Sendes med hvert svar. Lad den stå synlig — det er den linje, der hindrer dette i at blive læst som juridisk rådgivning. |
Et tjek, der fejler, er den nyttige del, så her er ét ordret gengivet og trimmet til de første tre felter:
"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.",
En ærlig forskel fra CLI'en
JSON'en score deler beståede tjek med alle ni, inklusive de fire, der kun gælder nogle sites — cookies, programmatisk annoncering, Google Ads, DORA. Et site, der har gjort alt rigtigt for sin type, kan stadig vise et middelmådigt tal.
Den CLI er den udgave, der deler den op, og den fortæller hvilke tjek den ikke talte med og hvorfor. Hvis tallet betyder mere end JSON-formen, så kør CLI'en. Dette API serveres i øjeblikket af en ældre udgave af den samme motor end den i repositoriet, så den returnerer endnu den deling.
De tre andre endepunkter
De er alle uden godkendelse og CORS-åbne, samme som /scan.
GET/stats
Returnerer scans og de tyve mest scannede værter. Vores egne smoke-test-domæner er ikke på listen.
Læs ikke dette som et brugertal. Tælleren tælles både af vores egne automatiske testkørsler og af besøgende — målt 28. september 2026 kom cirka tre fjerdedele af det samlede fra automatiske kørsler mod reserverede IP-adresser. Det er en liveness-prøve, ikke et popularitetsbevis.
POST/subscribe
Gemmer en mailadresse til compliance-opdateringer. Body: email, valgfrit url, score, source.
Returnerer 400 for en ugyldig adresse og 422 for en test- eller engangsadresse, så testkørsler aldrig havner på listen.
GET/config
Offentlig runtime-konfiguration. De checkout-URL'er, den indeholder, er tomme i produktion, og det er med vilje: sitet hardkoder kontraktlinks, og betalingssiderne styres ikke fra en worker-variabel.
Grænser og fejl
Ingen nøgle, ingen konto og én grænse der betyder noget: 10 requests per minute per IP, talt serverside.
| Status | Når du får den | Body |
|---|---|---|
400 | Ingen brugbar url parameter | {"error": "Please provide a valid public http(s) URL, e.g. ?url=example.com"} |
404 | Enhver anden sti end de fire ovenfor | {"error": "Not found. Use GET /scan?url=example.com"} |
422 | /subscribe med en testadresse | {"error": "Test address rejected."} |
429 | Mere end 10 anmodninger i minuttet fra én IP | {"error": "Rate limit reached. Try again in a few minutes."} |
502 | Det valgte site kunne ikke læses | {"error": "Scan failed: ..."} |
Et 502 betyder, at det site, du spurgte til, fejlede — ikke at API'et gjorde. Svaret bærer den underliggende besked, så læs den, før du prøver igen — en vært bag en bot-mur fejler hele tiden, og flere forsøg hjælper ikke.
Hvad dette API ikke gør
Det er én anmodning om ét site på ét tidspunkt. Det gemmer ingen historik, kører intet på en tidsplan, sender ingen webhooks og tager ingen betaling. Har du brug for noget af det, er det betalte produkt i dag WordPress-pluginet: det scanner dit eget site én gang om dagen, gemmer de seneste 12 scanninger, sender dig en mail når et tjek brydes, og genererer en HTML-rapport, du kan sende til en kunde. Hosted overvågning er ikke en del af det.
De ni tjek er tekniske signaler læst i det serverede HTML. DORA-tjekket læser efter offentlige markører i sidens tekst og er ikke en vurdering af noget som helst.
Brug for historik, tidsplan og en rapport?
API'et ovenfor forbliver gratis. Pro er en licens til WordPress-pluginet: daglige re-scans i din egen WordPress, de seneste 12 scanninger gemt, en mail når et tjek brydes, og en HTML-rapport fra den seneste scanning. Det låser også de redigerbare HTML-dokumentstartere op.
Køb Pro — $79/år pr. website →