Prøv det i sandkassen → Hvert endpoint har en knap, der kører det mod live-tjenesten. Intet her kræver en nøgle, så en anmodning, du sender fra denne side, er reel: Den reserverer en rigtig adresse, og den tæller med.
Forløbet
To forespørgsler og én email. Det tredje kald er kun nødvendigt, fordi analysen tager nogle få sekunder.
Reservér en adresse
Send en POST-anmodning til indbakke-endpointet. Du får en adresse tilbage, som accepterer præcis én meddelelse og udløber efter en time, samt den slug, som alt andet bruger som nøgle.
Send den rigtige meddelelse til den
Via SMTP fra den platform, der skal sende kampagnen. Halvdelen af kontrollerne læser headere, som din afsendelsesplatform tilføjer, så en meddelelse, der er skrevet manuelt, måler det forkerte.
Poll status, og læs derefter rapporten
Status-endpointet fylder nogle få hundrede byte og fortæller dig, om det er værd at hente hele rapporten endnu. Selve rapporten fylder flere tusinde linjer.
# 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"}} ] }
Godkendelse
Der er ingen. Ingen nøgle at anmode om, ingen header at angive, ingen konto at oprette. Den slug, du får tilbage, er adgangsmuligheden: Den, der har den, kan læse rapporten, og ingen andre kan gætte den.
Endpoints
Basisadresse https://email-spam-tester.com. Alt svarer med JSON.
POST/api/v1/inbox
Reserverer en engangsadresse. Begge parametre er valgfrie.
| lang | Det sprog, som rettelsesplanen og resultaterne for hvert tjek skrives på, som en ISO-kode. Det afgøres nu, fordi meddelelsen ankommer via SMTP flere minutter senere og ikke indeholder nogen indikation af, hvem der venter på den. En ukendt kode falder tilbage til engelsk. |
| utm_source, utm_medium, utm_campaign | Sendes videre til vores analyseværktøj. Nyttigt, hvis du måler din egen integration. |
GET/api/v1/tests/{slug}/status
Billigt at polle. Returnerer de to statusfelter og oplysning om, hvor langt tjekkene er nået, og intet andet.
GET/api/v1/tests/{slug}
Hele rapporten. Svarer med 202, mens adressen er reserveret, og intet endnu er ankommet, og med 200, når det er sket.
GET/api/v1/tests/{slug}/message
Meddelelsen præcis som den blev leveret: alle headere i wire-rækkefølge, begge brødtekster, listen over vedhæftede filer og den rå kilde. Hentes separat, fordi rapporten polles, og dette kan fylde op til en megabyte.
PUT/api/v1/tests/{slug}/locale
Ændrer sproget for en reservation, der endnu ikke er blevet brugt. Til en agent, der finder ud af, hvilket sprog dens bruger læser, efter at den allerede har bedt om adressen. Afvises, når meddelelsen er ankommet, fordi analysen på det tidspunkt kører.
GET/api/health
Livstegn. Ingen godkendelse, ingen bivirkninger.
Læsning af rapporten
Felterne, der indeholder svaret, i den rækkefølge, du sandsynligvis ønsker dem.
| score_ours | 0 til 100. Vores model. Godkendelse og infrastruktur vægter mest, fordi de afgør leveringen, før et filter læser et eneste ord af teksten. |
| score_compat | 0 til 10. Gengiver det SpamAssassin-lignende tal, som folk allerede sammenligner med, så rapporten kan sammenlignes med det, nogen har set et andet sted. |
| subscores | Den samme skala fra 0 til 100 pr. sektion: auth, infra_spam, content, compliance. |
| checks[] | Alle 41, hver med en status, en konklusion på én linje, det evidensgrundlag, den blev afgjort ud fra, og hvad den kostede på de to scorer. |
| checks[].citations | Hvor resultatet kommer fra: afsnittet i RFC'en, citeret ordret, og siden, hvor Google angiver sit eget krav. Udvalgt manuelt frem for genereret, så der kan stoles på dem. |
| fixes[] | Hvad der skal ændres, i rækkefølge, med det antal point, som hver ændring er værd. Gevinsterne beregnes ved at score rapporten igen, ikke ved et skøn. |
| complete | False, når en kontrol ikke kunne køres. Et ukontrolleret punkt er aldrig godkendt, så betragt scoren som optimistisk, indtil værdien er true. |
| report_url | Den menneskeligt læsbare side. Giv den til en person i stedet for en mur af JSON. |
Statusser
En kontrol har én af fem statusser, og forskellen mellem to af dem betyder mere, end det ser ud til.
| pass | Kontrollen blev kørt og fandt ingen fejl. |
| warn | Værd at rette. Koster point. |
| fail | Vil koste dig levering. Koster flere point. |
| spring over | Fandt ikke anvendelse. Ingen vedhæftede filer at scanne, ingen HTML-del at vægte. Ikke godkendt. |
| fejl | Vi kunne ikke afgøre det. Udeladt fra scoren og markeret i stedet for at blive talt som godkendt. |
analysis_status gennemgår received, analyzing, checks_ready, failed. ai_status gennemgår pending, running, ready, fallback, error. Den deterministiske rapport er endelig ved checks_ready; ai_status tilføjer altid kun planen.
Hvad der kan returneres
| 202 | Adressen er reserveret, og ingen meddelelse er ankommet. Svarteksten indeholder adressen, udløbstidspunktet og sproget, så en klient, der ikke oprettede reservationen, stadig kan vise den. |
| 404 | Denne slug findes ikke. Den har aldrig eksisteret, eller reservationen blev glemt. |
| 410 | Adressen udløb, før en meddelelse ankom. |
| 409 | Du forsøgte at ændre sproget, efter at meddelelsen allerede var ankommet. |
| 429 | Grænsen for gratis test for din adresse. Der er lige nu ingen grænse pr. person for denne tjeneste; hvis en sådan grænse nogensinde fastsættes, angiver svarteksten, hvornår den nulstilles. |
Fire ting, der er værd at vide
Én meddelelse pr. adresse
Den anden afvises. Din tidligere rapport forbliver intakt, hvilket er formålet.
En time til at bruge den
Adressen udløber; det gør rapporten ikke. Rapportlinks er permanente, så et link, der indsættes i en sag, bliver ved med at virke.
Send fra platformen
Hvis du tester en kampagne fra en personlig konto, måler du denne konto. Næsten alt i afsnittet om autentificering handler om afsendelsesinfrastrukturen, ikke teksten.
Test igen efter rettelse
De forventede forbedringer beregnes én rettelse ad gangen, og de kan ikke kombineres. Den anden rapport er det ærlige tal.
Til maskiner
- /api/openapi.json OpenAPI-beskrivelsen, genereret ud fra den samme kode, som leverer API'et.
- /llms.txt, /llms-full.txt Et kort kort over dette websted til sprogmodeller, i llms.txt-konventionen, og en længere version med hele forløbet og rapportfelterne i én fil.
- /mcp En MCP-server med samme funktionalitet og en blokerende ventefunktion, som er bedre end polling inde fra en model.
- For agents Agentsiden: hvornår dette skal bruges, hvordan en sprunget kontrol skal læses i forhold til en bestået, og hvilke resultater der er DNS-poster, som en person skal ændre, frem for tekst, som en agent kan redigere.
Prøv først én manuelt
Det tager cirka et minut og viser dig præcis, hvad JSON beskriver.