Fakeshop-Check API
Prüfen Sie Online-Shops und Websites programmatisch auf Betrugssignale – dieselbe KI-gestützte Analyse, die auch unseren Fake-Shop-Check antreibt. Kostenlos zum Ausprobieren, mit API-Key für produktiven Einsatz.
Der erste API-Aufruf
Ein POST-Request an /api/check genügt. Ohne API-Key gilt das kostenlose Kontingent von 50 Anfragen pro Tag und IP-Adresse – für erste Tests reicht das völlig.
curl -X POST "https://fakeshop.ai/api/check?v=2&lang=de" \
-H "Content-Type: application/json" \
-H "X-Api-Key: fsk_live_ihr_schluessel" \
-d '{"url": "https://beispiel-shop.de"}'const res = await fetch('https://fakeshop.ai/api/check?v=2&lang=de', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'fsk_live_ihr_schluessel',
},
body: JSON.stringify({ url: 'https://beispiel-shop.de' }),
});
const data = await res.json();
console.log(data.verdict, data.score);API-Key im Header
Authentifizierte Requests senden ihren Schlüssel im Header X-Api-Key. Ohne Key laufen Requests anonym über das IP-basierte Free-Kontingent. Einen eigenen Key erstellen Sie kostenlos und selbstständig im Entwickler-Portal – inklusive Gratis-Guthaben zum Testen. Bei Fragen zu größeren Volumina erreichen Sie uns unter [email protected].
X-Api-Key: fsk_live_ihr_schluesselKostenlos testen, fair limitiert
Ohne API-Key sind 50 Prüfungen pro Tag und IP-Adresse kostenlos möglich. Mit einem API-Key gilt stattdessen das Kontingent Ihres Tarifs (Prepaid-Credits; im kostenlosen Tarif inklusive). Ist das Kontingent erschöpft, antwortet die API mit Status 429, dem Fehlercode quota_exceeded und einem Retry-After-Header (Sekunden bis zur Zurücksetzung um Mitternacht UTC).
Systematisches Scraping oder Missbrauch der kostenlosen Kontingente ist untersagt und kann zur Sperrung der IP-Adresse führen. Für höhere Limits oder produktive Integrationen kontaktieren Sie uns bitte unter [email protected].
POST /api/check
Request-Parameter:
| Parameter | Ort | Typ | Pflicht | Beschreibung |
|---|---|---|---|---|
url | Body | string | Ja | Die zu prüfende Shop- oder Website-URL. |
checkType | Body | shop | website | Nein | Prüfprofil. Standard ist shop. website erlaubt eine Seriositätsprüfung, wenn die URL kein Online-Shop ist. |
force | Body | boolean | Nein | Erzwingt eine frische Prüfung statt eines gecachten Ergebnisses (max. 24 h Cache). |
v | Query | 2 | Ja | Antwort-Version. Mit v=2 werden die aktuellen, englischen Enum-Werte geliefert – ohne diesen Parameter ein veraltetes Legacy-Format. |
lang | Query | de | en | Nein | Sprache der Textfelder (summary, recommendation, reasons, …). Standard ist de. |
Antwort-Schema
Top-Level-Felder der Antwort:
| Feld | Typ | Beschreibung |
|---|---|---|
domain | string | Geprüfte Domain ohne Protokoll. |
score | number | null | Vertrauens-Score 0–100. null bei not_a_shop oder unreachable. |
verdict | safe | suspicious | danger | not_a_shop | unreachable | Gesamteinschätzung. |
checkType | shop | website | Angewandtes Prüfprofil. |
trustLevel | { level, label } | level ist 1–5 (maschinenlesbar), label ein sprachabhängiger Anzeigetext. |
confidenceBand | high | medium | low | Wie verlässlich die Datenlage für diese Einschätzung ist. |
summary | string | null | Kurze, sprachabhängige Zusammenfassung des Ergebnisses. |
recommendation | string | null | Handlungsempfehlung in Klartext. |
factors | Factor[] | Einzelne Prüf-Signale: { id, label, status, impact, reasons[], display? }. |
topSignals | Factor[] | Die auffälligsten Signale, gleiche Form wie factors. |
cached | boolean | true, wenn das Ergebnis aus dem 24h-Cache stammt. |
checkedAt | string (ISO 8601) | Zeitpunkt der (letzten) Prüfung. |
faviconUrl | string | null | Favicon der geprüften Domain, falls verfügbar. |
previewImage | string | null | Screenshot-URL der Startseite, falls vorhanden. |
Felder je Eintrag in factors / topSignals:
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | Stabiler Code des Prüf-Signals, z. B. impressum, domainAge, fakeshopLists. |
label | string | Sprachabhängiger Anzeigename. |
status | ok | warn | fail | unknown | Ergebnis dieses einzelnen Signals. |
impact | positive | negative | neutral | Wirkung auf den Gesamt-Score. |
reasons | string[] | Sprachabhängige Begründungssätze. |
display | object (optional) | Zusätzliche, unbedenkliche Anzeigewerte (z. B. Domain-Alter in Monaten). |
Beispiel-Response:
{
"domain": "beispiel-shop.de",
"score": 82,
"verdict": "safe",
"checkType": "shop",
"cached": false,
"checkedAt": "2026-07-02T10:15:32.000Z",
"trustLevel": {
"level": 4,
"label": "sehr sicher"
},
"confidenceBand": "high",
"summary": "Dieser Shop zeigt keine der bekannten Warnsignale für Fake-Shops.",
"recommendation": "Der Kauf erscheint unbedenklich.",
"factors": [
{
"id": "impressum",
"label": "Impressum & Rechtstexte",
"status": "ok",
"impact": "positive",
"reasons": [
"Vollständiges Impressum mit Handelsregisternummer gefunden."
]
},
{
"id": "domainAge",
"label": "Domain-Alter",
"status": "ok",
"impact": "positive",
"reasons": [
"Domain ist seit 47 Monaten registriert."
],
"display": {
"ageMonths": 47
}
}
],
"topSignals": [
{
"id": "impressum",
"label": "Impressum & Rechtstexte",
"status": "ok",
"impact": "positive",
"reasons": [
"Vollständiges Impressum mit Handelsregisternummer gefunden."
]
}
],
"faviconUrl": "https://beispiel-shop.de/favicon.ico",
"previewImage": null,
"previewCapturedAt": null
}errorCode-Katalog
Fehlerantworten enthalten neben einem lesbaren error-Text immer ein stabiles errorCode-Feld. Bauen Sie Ihre Fehlerbehandlung gegen errorCode, nicht gegen den Text – der Text kann sich je nach lang-Parameter unterscheiden.
| errorCode | HTTP-Status | Bedeutung |
|---|---|---|
url_required | 400 | Im Request-Body fehlt url, oder der Wert ist kein String. |
invalid_check_type | 400 | checkType enthält einen unbekannten Wert. Erlaubt sind nur shop und website. |
quota_exceeded | 429 | Das Tageslimit ist erreicht. Der Retry-After-Header nennt die Sekunden bis zur Zurücksetzung (Mitternacht UTC). |
invalid_api_key | 401 | Der übermittelte X-Api-Key ist ungültig, unbekannt oder wurde gesperrt. |
too_many_requests | 429 | Kurzfristiges Burst-Limit überschritten, unabhängig vom Tageslimit. |
db_unavailable | 503 | Die Datenbank ist vorübergehend nicht erreichbar. Bitte später erneut versuchen. |
Bereit für den produktiven Einsatz?
Erstellen Sie kostenlos einen API-Key im Entwickler-Portal – inklusive Gratis-Guthaben zum Testen. Für höhere Volumina oder Rückfragen erreichen Sie uns jederzeit unter [email protected].