Shop-Prüfung per API
Sie schicken eine Shop-Adresse und bekommen dieselbe Prüfung wie auf unserer Website zurück: Urteil, Vertrauenszahl und die Gründe dahinter. So bauen Sie zum Beispiel eine Warnung vor dem Bezahlen oder eine Vorprüfung für den Support.
{ "url": "https://beispiel-shop.example" }{
"domain": "beispiel-shop.example",
"score": 82,
"verdict": "safe",
"checkedAt": "2026-09-28T10:15:32.000Z",
…
}Anzeige auf der WebsiteUnauffällig
Fiktives Beispiel mit erfundener Adresse (.example).
Der erste API-Aufruf
Ein POST-Request an /api/check genügt. Ohne API-Schlüssel gilt ein kostenloses Kontingent von 50 Prüfungen pro Tag und IP-Adresse.
curl -X POST "https://fakeshop.ai/api/check?lang=de" \
-H "Content-Type: application/json" \
-H "X-Api-Key: fsk_live_ihr_schluessel" \
-d '{"url": "https://beispiel-shop.example"}'Zeigen Sie auf einen Feldnamen oder tippen Sie ihn an, dann steht hier, was das Feld enthält.
{: "beispiel-shop.example",: 82,: "safe",: "shop",: true,: "2026-09-28T10:15:32.000Z",: { "level": 4, "label": "unauffällig" },: "high",: "fashion",: "none",: "Fiktives Beispiel: keine deutlichen Warnzeichen in den geprüften Merkmalen.",: "Zahle trotzdem mit einer Zahlart mit Käuferschutz.",: [{: "tradeRegister",: "Handelsregister",: "ok",: "positive",: ["Die Firma aus dem Impressum ist unter der angegebenen Nummer eingetragen."]},{: "domainAge",: "Domain-Alter",: "ok",: "positive",: ["Die Domain ist seit 47 Monaten registriert."],: { "ageMonths": 47 }}],: [{: "tradeRegister",: "Handelsregister",: "ok",: "positive",: ["…"]}],: {"kind": "ai","text": "Automatisierte Einschätzung, in Teilen mit KI erstellt. Ohne Gewähr, keine Rechtsberatung. Haftung nach unseren Nutzungsbedingungen.","aiInvolved": true,"regulation": "EU 2024/1689 Art. 50","termsUrl": "https://fakeshop.ai/nutzungsbedingungen","methodUrl": "https://fakeshop.ai/methodik#ki-einsatz"}}verdictsafe | suspicious | danger | not_a_shop | unreachable
Gesamteinschätzung.
verdict ist ein Codewert. Die Website zeigt safe als „Unauffällig“. Alle Werte
Zugang und Limits
- 50
Ohne Schlüssel
50 Prüfungen pro Tag und IP-Adresse, kostenlos
- 100
Mit Schlüssel
1 Credit je Prüfung, 100 Credits pro Monat sind frei
- 20
Kurzzeitlimit
Unabhängig davon gilt für alle Anfragen ein Kurzzeitlimit von 20 Prüfungen pro Minute und IP-Adresse (Status 429, too_many_requests).
- JSON
Format
JSON über HTTPS, Texte auf Deutsch oder Englisch
Authentifizierung mit API-Schlüssel
Authentifizierte Requests senden ihren Schlüssel im Header X-Api-Key. Ohne Schlüssel laufen Requests anonym über das IP-basierte Kontingent. Einen Schlüssel erstellen Sie selbst im Entwickler-Portal. Konten mit API-Schlüssel erhalten 100 kostenlose Credits pro Monat. Bei Fragen zu größeren Volumina erreichen Sie uns unter [email protected].
X-Api-Key: fsk_live_ihr_schluesselWir speichern Schlüssel nur als Hash. Ein verlorener Schlüssel lässt sich deshalb nicht wieder anzeigen. Sie löschen ihn und erstellen einen neuen. Pro Schlüssel können Sie ein eigenes Tageslimit setzen.
Kontingente und Limits
Ohne API-Schlüssel sind 50 Prüfungen pro Tag und IP-Adresse kostenlos. Mit Schlüssel kostet jede Prüfung einen Credit. Zusätzlich gilt für alle Anfragen ein Kurzzeitlimit von 20 Prüfungen pro Minute und IP-Adresse.
| Status | Fehlercode | Wann |
|---|---|---|
402 | insufficient_credits | Das Guthaben ist aufgebraucht. |
429 | quota_exceeded | Das Tageskontingent ohne Schlüssel ist erschöpft. Der Header Retry-After nennt die Sekunden bis zur Zurücksetzung um Mitternacht UTC. |
429 | too_many_requests | Mehr als 20 Prüfungen pro Minute und IP-Adresse. |
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].
Was die Urteilswerte bedeuten
Das Feld verdict liefert immer einen englischen Codewert. Unsere Website zeigt dafür deutsche Urteilswörter; safe erscheint dort als „Unauffällig“, nie als „sicher“. Ein Codewert ist keine Empfehlung, er fasst die geprüften Merkmale zum Prüfdatum zusammen.
| verdict | Anzeige auf der Website* | Bedeutung |
|---|---|---|
safe | Unauffällig | Keine belastbaren Warnsignale in den geprüften Merkmalen. Keine Empfehlung und keine Garantie. |
suspicious | Verdächtig | Gemischtes Bild: Manche Merkmale sprechen für den Shop, andere fehlen oder sind unklar. |
danger | Gefahr | Mehrere ernste Warnsignale oder ein Eintrag auf einer ausgewerteten Warnliste. |
not_a_shop | Kein Shop | Die Adresse führt nicht zu einem Online-Shop. score ist null. |
unreachable | Nicht prüfbar | Die Seite war nicht erreichbar. score ist null. |
API-Referenz
POST /api/check nimmt diese Parameter an.
| 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 gespeicherten Ergebnisses. Gespeicherte Ergebnisse werden je nach Lage bis zu 7 bzw. 90 Tage wiederverwendet. |
lang | Query | de | en | Nein | Sprache der Textfelder (summary, recommendation, reasons). Alternativ über Accept-Language. Standard ist de. |
Felder auf oberster Ebene:
| Feld | Typ | Beschreibung |
|---|---|---|
domain | string | Geprüfte Domain ohne Protokoll. |
score | number | null | Vertrauenszahl von 0 bis 100, höher heißt mehr Vertrauen. null bei not_a_shop, unreachable oder wenn das Ergebnis gerade von Hand geprüft wird. |
verdict | safe | suspicious | danger | not_a_shop | unreachable | Gesamteinschätzung. |
checkType | shop | website | Angewandtes Prüfprofil. |
productCategory | string | null | Produktkategorie des Shops, z. B. electronics oder fashion, falls erkannt. |
fakeshopStatus | none | suspected | confirmed | none, suspected oder confirmed. confirmed bedeutet: Treffer auf einer Warnliste oder Bestätigung von Hand. |
trustLevel | { level, label } | level ist 1 bis 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[] | Die einzelnen Merkmale: { id, label, status, impact, reasons[], display? }. |
topSignals | Factor[] | Die auffälligsten Merkmale, gleiche Form wie factors. |
aiContent | object (optional) | Nur vorhanden, wenn die Antwort Text eines Sprachmodells enthält: Regelwerk (EU 2024/1689 Art. 50), digitalSourceType, Kennzeichen und die Liste der betroffenen Felder in fields. Wer diese Texte veröffentlicht, muss sie nach Art. 50 Abs. 4 KI-VO selbst kennzeichnen. |
notice | { kind, text, aiInvolved, termsUrl, methodUrl } | Hinweis zur Einstufung: kind nennt die Herkunft (ai = eigene Prüfung mit Sprachmodell, auto, list, directory, manual, reports), text den Satz zu Gewähr und Haftung, aiInvolved, ob ein Sprachmodell mitgewirkt hat. termsUrl führt zu den Nutzungsbedingungen, methodUrl zur Methodik. Wer ein Urteil oder die Vertrauenszahl anzeigt, zeigt diesen Hinweis mit an. |
cached | boolean | true, wenn das Ergebnis aus einer früheren Prüfung stammt (siehe checkedAt). |
checkedAt | string (ISO 8601) | Zeitpunkt der (letzten) Prüfung. |
faviconUrl | string | null | Favicon der geprüften Domain, falls verfügbar. |
previewImage | string | null | Bild der Startseite, falls vorhanden; meist null. |
Felder je Eintrag in factors / topSignals:
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | Stabiler Code des Merkmals, z. B. impressum, domainAge, fakeshopLists. |
label | string | Sprachabhängiger Anzeigename. |
status | ok | warn | fail | unknown | Ergebnis dieses einzelnen Merkmals. |
impact | positive | negative | neutral | Wirkung auf die Vertrauenszahl. |
reasons | string[] | Sprachabhängige Begründungssätze. |
aiGenerated | true (optional) | true, wenn die Begründungen dieses Merkmals ein Sprachmodell geschrieben hat. Dieselbe Angabe steht als display.aiGenerated an der Recherche-Zusammenfassung des Merkmals reputationCheck (display.summary). Veröffentlichen Sie diese Texte, kennzeichnen Sie sie nach Art. 50 Abs. 4 KI-VO. |
display | object (optional) | Zusätzliche, unbedenkliche Anzeigewerte (z. B. Domain-Alter in Monaten). |
Bei hoher Last kann eine Erstprüfung in eine Warteschlange gehen. Die API antwortet dann mit Status 202 und { status: "queued", jobId, domain }. Fragen Sie das Ergebnis über GET /api/check/status/:jobId ab, bis es vorliegt. Gespeicherte Ergebnisse kommen immer sofort mit Status 200.
Fehlerantworten enthalten neben einem lesbaren error-Text immer ein stabiles errorCode-Feld. Bauen Sie Ihre Fehlerbehandlung gegen errorCode. Der Text kann sich je nach lang-Parameter unterscheiden.
| Code | 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 Tageskontingent ohne Schlüssel oder das Tageslimit des Schlüssels ist erreicht. Retry-After nennt die Sekunden bis 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. |
insufficient_credits | 402 | Das Credit-Guthaben des Schlüssels ist aufgebraucht. |
queue_unavailable | 503 | Nur Status-Abfrage: Die Warteschlange ist gerade nicht erreichbar. |
job_not_found | 404 | Nur Status-Abfrage: Die jobId ist unbekannt oder abgelaufen. |
scan_failed | 200 | Nur Status-Abfrage: Die Prüfung ist fehlgeschlagen (Body { status: "failed" }). |
Ohne Schlüssel ausprobieren
Die beiden Endpunkte unten sind öffentlich. Der Knopf ruft sie von Ihrem Browser aus ab und zeigt die Antwort unverändert.
Aufgezeichnete Antwort vom 03.10.2026 (noch nicht abgerufen)
{
"totalChecks": 79554,
"fakeShopsDetected": 37513,
"cleanShops": 42036,
"checksToday": 0,
"fakeQuota": 0.4715413429871534,
"updatedAt": "2026-10-03T12:10:29.861Z"
}Entspricht diesem Aufruf: curl "https://fakeshop.ai/api/stats"
Die Zahlen und Domains der Live-Antwort ändern sich mit dem Bestand. Nach Antwortfeld und Status richten Sie sich nach der Referenz oben.
Zur stats-Antwort: fakeQuota ist fakeShopsDetected geteilt durch totalChecks (0,47 entspricht 47 %). checksToday zählt die Prüfungen seit UTC-Mitternacht, deshalb steht der Wert kurz nach Mitternacht nahe 0.
Preise für Credits
Ein Credit entspricht einer Prüfung. Credits kaufen Sie einmalig im Entwickler-Portal, ohne Abo. Stand der Preise: 2.10.2026.
Starter
100Credits
4,90 €
0,049 € je Prüfung
Standard
1.000Credits
24,00 €
0,024 € je Prüfung
Pro
5.000Credits
89,00 €
0,018 € je Prüfung
Business
25.000Credits
299,00 €
0,012 € je Prüfung
Kostenlos: 100 Credits pro Monat mit Konto, 50 Prüfungen pro Tag und IP ohne Schlüssel.
Weitere öffentliche Endpunkte
Diese Endpunkte brauchen keinen Schlüssel und kosten keine Credits.
GET /api/warnlistParameterlimit (Standard 50, max. 1000), offset
LiefertDomains auf der Warnliste mit Kategorie und Prüfdatum
GET /api/fakeshopsParameterlimit (Standard 50, max. 200)
LiefertGelistete Shops (Warnliste oder Einschätzung Gefahr) mit Produktkategorie
GET /api/statsParameterkeine
LiefertGesamtzahlen: geprüfte Domains, gelistete Shops, Stand
GET /api/iban-checkParameteriban (max. 30 Anfragen pro Minute und IP)
LiefertOb es freigegebene Meldungen zu dieser IBAN gibt, Anzahl, Datum der ersten
Schlüssel für den produktiven Einsatz
Den API-Schlüssel legen Sie im Entwickler-Portal selbst an. 100 Credits pro Monat sind kostenlos. Für höhere Volumina oder Rückfragen erreichen Sie uns unter [email protected].