In der Sandbox testen → Jeder Endpunkt mit einer Schaltfläche, die ihn im Live-Dienst ausführt. Hier ist kein Schlüssel erforderlich, daher ist eine Anfrage, die Sie von dieser Seite senden, eine echte Anfrage: Sie reserviert eine echte Adresse und wird gezählt.
Der Ablauf
Zwei Anfragen und eine E-Mail. Der dritte Aufruf ist nur erforderlich, weil die Analyse einige Sekunden dauert.
Eine Adresse reservieren
Senden Sie eine POST-Anfrage an den Posteingangs-Endpunkt. Sie erhalten eine Adresse zurück, die genau eine Nachricht akzeptiert und nach einer Stunde abläuft, sowie den Slug, über den alles Weitere zugeordnet wird.
Die echte Nachricht dorthin senden
Über SMTP, von der Plattform, die die Kampagne versenden wird. Die Hälfte der Prüfungen liest Header, die Ihre Versandplattform hinzufügt, daher misst eine manuell verfasste Nachricht das Falsche.
Den Status abfragen, dann den Bericht lesen
Der Status-Endpunkt ist einige Hundert Byte groß und teilt Ihnen mit, ob es sich bereits lohnt, den vollständigen Bericht abzurufen. Der Bericht selbst umfasst mehrere Tausend Zeilen.
# 1. reserve a single-use address curl -sX POST 'https://email-spam-tester.com/api/v1/inbox?lang=en' { "address": "test-<slug>@t.email-spam-tester.com", "slug": "<slug>", "expires_at": "2026-01-01T12:00:00Z" }
# 2. send your message to that address, then poll curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>/status' { "slug": "<slug>", "analysis_status": "checks_ready", "ai_status": "running", "checks_done": 39, "checks_total": 39 }
# 3. read the report once analysis_status is checks_ready curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>' { "report_url": "https://email-spam-tester.com/t/<slug>", "score_ours": 86.4, "score_compat": 9.2, "subscores": {"auth": 100.0, "infra_spam": 78.1, "content": 92.0, "compliance": 75.0}, "complete": true, "checks": [ { "id": "auth.dmarc", "status": "warn", "title": "DMARC result", "summary": "DMARC passes, but the policy is p=none.", "weight_ours": -4.0, "evidence": {"policy": "none", "aligned": "dkim"}, "citations": {"standards": [{"title": "RFC 9989 §4.7", "quote": "..."}]} } ], "fixes": [ {"id": "dmarc-enforce", "gain_ours": 4.0, "gain_compat": 0.0, "fix": {"title": "Move DMARC to quarantine", "severity": "medium"}} ] }
Authentifizierung
Es gibt keine. Kein Schlüssel muss angefordert, kein Header gesetzt und kein Konto erstellt werden. Der zurückgegebene Slug ist die Zugriffsberechtigung: Wer ihn besitzt, kann diesen Bericht lesen, und niemand sonst kann ihn erraten.
Endpunkte
Basisadresse https://email-spam-tester.com. Alles antwortet mit JSON.
POST/api/v1/inbox
Reserviert eine einmalig verwendbare Adresse. Beide Parameter sind optional.
| lang | Sprache, in der der Maßnahmenplan und die Ergebnisse der einzelnen Prüfungen verfasst werden, als ISO-Code. Dies wird jetzt festgelegt, weil die Nachricht Minuten später über SMTP eintrifft und keinen Hinweis darauf enthält, wer auf sie wartet. Bei einem unbekannten Code wird Englisch verwendet. |
| utm_source, utm_medium, utm_campaign | Werden an unsere Analysen weitergegeben. Nützlich, wenn Sie Ihre eigene Integration messen. |
GET/api/v1/tests/{slug}/status
Kann kostengünstig abgefragt werden. Gibt die beiden Statusfelder und den Fortschritt der Prüfungen zurück, sonst nichts.
GET/api/v1/tests/{slug}
Der vollständige Bericht. Antwortet mit 202, solange die Adresse reserviert ist und noch nichts eingetroffen ist, und mit 200, sobald etwas eingetroffen ist.
GET/api/v1/tests/{slug}/message
Die Nachricht genau so, wie sie zugestellt wurde: jeder Header in der Übertragungsreihenfolge, beide Nachrichtentexte, die Liste der Anhänge und der rohe Quelltext. Wird separat abgerufen, weil der Bericht regelmäßig abgefragt wird und dies bis zu einem Megabyte groß sein kann.
PUT/api/v1/tests/{slug}/locale
Ändert die Sprache einer Reservierung, die noch nicht verwendet wurde. Für einen Agenten, der erst erfährt, welche Sprache sein Benutzer liest, nachdem er bereits nach der Adresse gefragt hat. Wird abgelehnt, sobald die Nachricht eingetroffen ist, weil die Analyse dann bereits läuft.
GET/api/health
Erreichbarkeitsprüfung. Keine Authentifizierung, keine Seiteneffekte.
Bericht lesen
Die Felder, die die Antwort enthalten, in der Reihenfolge, in der Sie sie wahrscheinlich benötigen.
| score_ours | 0 bis 100. Unser Modell. Authentifizierung und Infrastruktur haben das größte Gewicht, weil sie über die Zustellung entscheiden, bevor ein Filter ein Wort des Nachrichtentexts liest. |
| score_compat | 0 bis 10. Bildet die SpamAssassin-ähnliche Zahl nach, die bereits für Vergleiche verwendet wird, sodass der Bericht mit dem vergleichbar ist, was jemand anderswo gesehen hat. |
| subscores | Dieselbe Skala von 0 bis 100 pro Abschnitt: auth, infra_spam, content, compliance. |
| checks[] | Alle 41, jeweils mit einem Status, einem einzeiligen Ergebnis, den Belegen, auf deren Grundlage entschieden wurde, und den Auswirkungen auf die beiden Bewertungen. |
| checks[].citations | Woher der Befund stammt: der Abschnitt des RFC, wörtlich zitiert, und die Seite, auf der Google seine eigene Anforderung nennt. Von Hand kuratiert statt generiert, sodass Sie sich darauf verlassen können. |
| fixes[] | Was in welcher Reihenfolge zu ändern ist und wie viele Punkte jede Änderung wert ist. Die Zugewinne werden durch eine erneute Bewertung des Berichts berechnet, nicht geschätzt. |
| complete | False, wenn eine Prüfung nicht ausgeführt werden konnte. Ein ungeprüfter Punkt gilt niemals als bestanden. Betrachten Sie die Punktzahl daher als optimistisch, bis dieser Wert true ist. |
| report_url | Die für Menschen lesbare Seite. Geben Sie diese einer Person statt einer Wand aus JSON. |
Status
Eine Prüfung hat einen von fünf Status, und der Unterschied zwischen zweien davon ist wichtiger, als es scheint.
| pass | Die Prüfung wurde ausgeführt und hat keinen Fehler gefunden. |
| warn | Sollte behoben werden. Kostet Punkte. |
| fail | Beeinträchtigt die Zustellung. Kostet mehr Punkte. |
| übersprungen | Nicht zutreffend. Keine Anhänge zum Scannen, kein HTML-Teil zum Gewichten. Gilt nicht als bestanden. |
| Fehler | Wir konnten es nicht feststellen. Wird von der Bewertung ausgeschlossen und gekennzeichnet, statt als bestanden gewertet zu werden. |
analysis_status durchläuft received, analyzing, checks_ready, failed. ai_status durchläuft pending, running, ready, fallback, error. Der deterministische Bericht ist bei checks_ready endgültig; ai_status fügt immer nur den Plan hinzu.
Was zurückkommen kann
| 202 | Die Adresse ist reserviert und es ist keine Nachricht eingegangen. Der Antworttext enthält die Adresse, den Ablaufzeitpunkt und die Sprache, sodass ein Aufrufer, der die Reservierung nicht erstellt hat, sie dennoch anzeigen kann. |
| 404 | Kein solcher Slug. Hat nie existiert oder die Reservierung wurde vergessen. |
| 410 | Die Adresse ist abgelaufen, bevor eine Nachricht eingegangen ist. |
| 409 | Sie haben versucht, die Sprache zu ändern, nachdem die Nachricht bereits eingegangen war. |
| 429 | Das Limit für kostenlose Tests für Ihre Adresse. Derzeit gibt es bei diesem Dienst kein Limit pro Person; falls jemals eines festgelegt wird, gibt der Antworttext an, wann es zurückgesetzt wird. |
Vier wissenswerte Dinge
Eine Nachricht pro Adresse
Die zweite wird abgelehnt. Ihr vorheriger Bericht bleibt unverändert, und genau das ist der Zweck.
Eine Stunde zur Nutzung
Die Adresse läuft ab; der Bericht nicht. Berichtslinks sind dauerhaft, sodass ein in ein Ticket eingefügter Link weiterhin funktioniert.
Von der Plattform senden
Wenn Sie eine Kampagne über ein persönliches Konto testen, messen Sie dieses Konto. Fast alles im Abschnitt zur Authentifizierung betrifft die Sendeinfrastruktur, nicht den Text.
Nach der Korrektur erneut testen
Die erwarteten Verbesserungen werden jeweils für eine einzelne Korrektur berechnet und lassen sich nicht kombinieren. Der zweite Bericht liefert den tatsächlichen Wert.
Für Maschinen
- /api/openapi.json Die OpenAPI-Beschreibung, generiert aus demselben Code, der die API bereitstellt.
- /llms.txt, /llms-full.txt Eine kurze Übersicht dieser Website für Sprachmodelle gemäß der llms.txt-Konvention und eine längere Version mit dem gesamten Ablauf und den Berichtsfeldern in einer Datei.
- /mcp Ein MCP-Server mit derselben Funktion und blockierendem Warten, was besser ist als Polling aus einem Modell heraus.
- For agents Die Agentenseite: wann dies verwendet werden sollte, wie eine übersprungene Prüfung im Vergleich zu einer bestandenen zu lesen ist und bei welchen Ergebnissen es sich um DNS-Einträge handelt, die eine Person ändern muss, statt um Text, den ein Agent bearbeiten kann.
Probieren Sie zuerst einen Test manuell aus
Es dauert etwa eine Minute und zeigt Ihnen genau, was das JSON beschreibt.