Prøv det i sandkassen → Hvert endepunkt, med en knapp som kjører det mot den aktive tjenesten. Ingenting her krever en nøkkel, så en forespørsel du sender fra denne siden, er reell: Den reserverer en reell adresse og telles med.
Forløpet
To forespørsler og én e-post. Det tredje kallet er bare nødvendig fordi analysen tar noen sekunder.
Reserver en adresse
Send en POST-forespørsel til innboks-endepunktet. Du får tilbake en adresse som godtar nøyaktig én melding og utløper etter en time, samt sluggen som alt annet identifiseres med.
Send den faktiske meldingen til den
Over SMTP, fra plattformen som skal sende kampanjen. Halvparten av kontrollene leser meldingshoder som sendeplattformen din legger til, så en melding som er skrevet manuelt, måler feil ting.
Spør etter status, og les deretter rapporten
Status-endepunktet er på noen hundre byte og forteller deg om det er verdt å hente hele rapporten ennå. Selve rapporten består av flere tusen 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"}} ] }
Autentisering
Det finnes ingen. Ingen nøkkel å be om, ingen header å angi, ingen konto å opprette. Sluggen du får tilbake, er tilgangen: Den som har den, kan lese rapporten, og ingen andre kan gjette den.
Endepunkter
Basisadresse https://email-spam-tester.com. Alt svarer med JSON.
POST/api/v1/inbox
Reserverer en engangsadresse. Begge parameterne er valgfrie.
| lang | Språket som utbedringsplanen og funnene for hver kontroll skal skrives på, som en ISO-kode. Dette avgjøres nå fordi meldingen kommer via SMTP noen minutter senere og ikke inneholder noen indikasjon på hvem som venter på den. En ukjent kode bruker engelsk som reserve. |
| utm_source, utm_medium, utm_campaign | Sendes videre til analyseløsningen vår. Nyttig hvis du måler din egen integrasjon. |
GET/api/v1/tests/{slug}/status
Rimelig å polle. Returnerer de to statusfeltene og hvor langt kontrollene har kommet, og ingenting annet.
GET/api/v1/tests/{slug}
Hele rapporten. Svarer med 202 mens adressen er reservert og ingenting har kommet ennå, og med 200 når noe har kommet.
GET/api/v1/tests/{slug}/message
Meldingen nøyaktig slik den ble levert: alle headere i overføringsrekkefølge, begge meldingstekstene, vedleggslisten og råkilden. Hentes separat fordi rapporten polles, og denne kan bli opptil én megabyte.
PUT/api/v1/tests/{slug}/locale
Endrer språket for en reservasjon som ennå ikke er brukt. For en agent som finner ut hvilket språk brukeren leser etter at den allerede har bedt om adressen. Avvises når meldingen har ankommet, fordi analysen da kjører.
GET/api/health
Livssjekk. Ingen autentisering, ingen bivirkninger.
Lese rapporten
Feltene som inneholder svaret, i den rekkefølgen du sannsynligvis vil ha dem.
| score_ours | 0 til 100. Vår modell. Autentisering og infrastruktur veier tyngst, fordi de avgjør levering før et filter leser et eneste ord av teksten. |
| score_compat | 0 til 10. Gjengir tallet i SpamAssassin-stil som folk allerede sammenligner med, slik at rapporten kan sammenlignes med det noen så et annet sted. |
| subscores | Den samme skalaen fra 0 til 100 per del: auth, infra_spam, content, compliance. |
| checks[] | Alle 41, hver med en status, et funn på én linje, bevisgrunnlaget det ble avgjort ut fra, og utslaget det ga på de to poengsummene. |
| checks[].citations | Hvor funnet kommer fra: delen av RFC-en, sitert ordrett, og siden der Google oppgir sitt eget krav. Kuratert manuelt i stedet for generert, slik at kildene er pålitelige. |
| fixes[] | Hva som må endres, i riktig rekkefølge, med antall poeng hver endring er verdt. Gevinstene beregnes ved å beregne rapportens poengsum på nytt, ikke ved å anslå dem. |
| complete | False når en kontroll ikke kunne kjøres. Et ukontrollert element er aldri godkjent, så betrakt poengsummen som optimistisk frem til dette er true. |
| report_url | Den lesbare siden. Gi den til en person i stedet for en vegg med JSON. |
Statuser
En kontroll har én av fem statuser, og forskjellen mellom to av dem er viktigere enn den ser ut til.
| pass | Kontrollen ble kjørt og fant ingen feil. |
| warn | Verdt å rette. Koster poeng. |
| fail | Vil koste deg levering. Koster flere poeng. |
| hopp over | Var ikke relevant. Ingen vedlegg å skanne, ingen HTML-del å vurdere. Ikke godkjent. |
| feil | Vi kunne ikke fastslå det. Utelatt fra poengsummen og merket, i stedet for å bli regnet som godkjent. |
analysis_status går gjennom received, analyzing, checks_ready, failed. ai_status går gjennom pending, running, ready, fallback, error. Den deterministiske rapporten er endelig ved checks_ready; ai_status legger bare til planen.
Hva som kan returneres
| 202 | Adressen er reservert, og ingen melding har kommet. Brødteksten inneholder adressen, utløpstiden og språket, slik at en kallende klient som ikke opprettet reservasjonen, likevel kan vise den. |
| 404 | Ingen slik slug. Den har aldri eksistert, eller reservasjonen ble glemt. |
| 410 | Adressen utløp før en melding kom. |
| 409 | Du prøvde å endre språket etter at meldingen allerede hadde kommet. |
| 429 | Grensen for gratistester for adressen din. Det er ingen grense per person for denne tjenesten akkurat nå. Hvis en slik grense noen gang blir satt, angir brødteksten når den nullstilles. |
Fire ting det er verdt å vite
Én melding per adresse
Den andre blir avvist. Den tidligere rapporten din forblir intakt, som er poenget.
Én time til å bruke den
Adressen utløper; rapporten gjør det ikke. Rapportlenker er permanente, så en lenke som limes inn i en sak, fortsetter å fungere.
Send fra plattformen
Testing av en kampanje fra en personlig konto måler den kontoen. Nesten alt i autentiseringsdelen handler om sendeinfrastrukturen, ikke teksten.
Test på nytt etter retting
De forventede forbedringene beregnes for én retting om gangen, og de kan ikke kombineres. Den andre rapporten gir det ærlige tallet.
For maskiner
- /api/openapi.json OpenAPI-beskrivelsen, generert fra den samme koden som leverer API-et.
- /llms.txt, /llms-full.txt Et kort kart over dette nettstedet for språkmodeller, i llms.txt-konvensjonen, og en lengre versjon med hele forløpet og rapportfeltene i én fil.
- /mcp En MCP-server med samme funksjonalitet og blokkerende venting, som er bedre enn polling fra innsiden av en modell.
- For agents Agentsiden: når du bør bruke dette, hvordan du skiller en kontroll som ble hoppet over fra en som besto, og hvilke funn som er DNS-oppføringer en person må endre, i stedet for tekst en agent kan redigere.
Prøv én manuelt først
Det tar omtrent ett minutt og viser deg nøyaktig hva JSON beskriver.