FÜR ENTWICKLER · API

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.

POST/api/check
Schnellstart

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
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"}'
JavaScript (fetch)
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);
Authentifizierung

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].

Header
X-Api-Key: fsk_live_ihr_schluessel
Limits & Quotas

Kostenlos 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).

Hinweis

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].

Endpunkt

POST /api/check

Request-Parameter:

ParameterOrtTypPflichtBeschreibung
urlBodystringJaDie zu prüfende Shop- oder Website-URL.
checkTypeBodyshop | websiteNeinPrüfprofil. Standard ist shop. website erlaubt eine Seriositätsprüfung, wenn die URL kein Online-Shop ist.
forceBodybooleanNeinErzwingt eine frische Prüfung statt eines gecachten Ergebnisses (max. 24 h Cache).
vQuery2JaAntwort-Version. Mit v=2 werden die aktuellen, englischen Enum-Werte geliefert – ohne diesen Parameter ein veraltetes Legacy-Format.
langQueryde | enNeinSprache der Textfelder (summary, recommendation, reasons, …). Standard ist de.
Response

Antwort-Schema

Top-Level-Felder der Antwort:

FeldTypBeschreibung
domainstringGeprüfte Domain ohne Protokoll.
scorenumber | nullVertrauens-Score 0–100. null bei not_a_shop oder unreachable.
verdictsafe | suspicious | danger | not_a_shop | unreachableGesamteinschätzung.
checkTypeshop | websiteAngewandtes Prüfprofil.
trustLevel{ level, label }level ist 1–5 (maschinenlesbar), label ein sprachabhängiger Anzeigetext.
confidenceBandhigh | medium | lowWie verlässlich die Datenlage für diese Einschätzung ist.
summarystring | nullKurze, sprachabhängige Zusammenfassung des Ergebnisses.
recommendationstring | nullHandlungsempfehlung in Klartext.
factorsFactor[]Einzelne Prüf-Signale: { id, label, status, impact, reasons[], display? }.
topSignalsFactor[]Die auffälligsten Signale, gleiche Form wie factors.
cachedbooleantrue, wenn das Ergebnis aus dem 24h-Cache stammt.
checkedAtstring (ISO 8601)Zeitpunkt der (letzten) Prüfung.
faviconUrlstring | nullFavicon der geprüften Domain, falls verfügbar.
previewImagestring | nullScreenshot-URL der Startseite, falls vorhanden.

Felder je Eintrag in factors / topSignals:

FeldTypBeschreibung
idstringStabiler Code des Prüf-Signals, z. B. impressum, domainAge, fakeshopLists.
labelstringSprachabhängiger Anzeigename.
statusok | warn | fail | unknownErgebnis dieses einzelnen Signals.
impactpositive | negative | neutralWirkung auf den Gesamt-Score.
reasonsstring[]Sprachabhängige Begründungssätze.
displayobject (optional)Zusätzliche, unbedenkliche Anzeigewerte (z. B. Domain-Alter in Monaten).

Beispiel-Response:

200 OK
{
  "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
}
Fehlerbehandlung

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.

errorCodeHTTP-StatusBedeutung
url_required400Im Request-Body fehlt url, oder der Wert ist kein String.
invalid_check_type400checkType enthält einen unbekannten Wert. Erlaubt sind nur shop und website.
quota_exceeded429Das Tageslimit ist erreicht. Der Retry-After-Header nennt die Sekunden bis zur Zurücksetzung (Mitternacht UTC).
invalid_api_key401Der übermittelte X-Api-Key ist ungültig, unbekannt oder wurde gesperrt.
too_many_requests429Kurzfristiges Burst-Limit überschritten, unabhängig vom Tageslimit.
db_unavailable503Die Datenbank ist vorübergehend nicht erreichbar. Bitte später erneut versuchen.
Loslegen

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].