Email Spam Tester

API de verificare a spamului:
e-mail, inbox și domeniu

Trimite-ne un singur mesaj real sau dă-ne doar un domeniu. Toate răspunsurile sunt în JSON.

Fără cheie, fără cont.

Cerere

# reserve a single-use address

$ curl -sX POST '.../api/v1/inbox?lang=en'

# send your message to that address, then

$ curl -s '.../api/v1/tests/k7m2x9qplw4tz8vn3b6c/status'

# read the report

$ curl -s '.../api/v1/tests/k7m2x9qplw4tz8vn3b6c'

Răspuns

200 OK

{
  "address": "test-k7m2x9qplw4tz8vn3b6c@t.email-spam-tester.com",
  "slug": "k7m2x9qplw4tz8vn3b6c",
  "expires_at": "2026-10-31T13:00:00Z"
}

200 OK

{
  "analysis_status": "checks_ready",
  "ai_status": "running",
  "checks_done": 42,
  "checks_total": 42
}

200 OK

{
  "score_ours": 86.4,
  "score_compat": 9.2,
  "subscores": {"auth": 100.0, "infra_spam": 78.1, "content": 92.0},
  "complete": true,
  "checks": [{"id": "auth.dmarc", "status": "warn"}],
  "fixes": [{"id": "dmarc-enforce", "gain_ours": 4.0}]
}

Cerere

# create a test

$ curl -sX POST '.../api/v1/placement' \ -d '{"public_results_accepted":true}'

# put the marker in the subject, send once to all, then

$ curl -s '.../api/v1/placement/wR3kP9xLq2vT8mZc'

Răspuns

201 Created

{
  "marker": "est-3f9a1c7e2b4d6a80c5e1f2d3",
  "status": "waiting",
  "results": [{"provider": "gmail", "placement": "pending"}],
  "fleet": {"status": "observing", "results": [
    {"provider": "yahoo", "placement": "pending"},
    {"provider": "outlook", "placement": "pending"}
  ]}
}

200 OK

{
  "status": "complete",
  "results": [{"provider": "gmail", "placement": "primary"}],
  "fleet": {"status": "finished", "results": [
    {"provider": "yahoo", "placement": "inbox"},
    {"provider": "outlook", "placement": "spam"}
  ]}
}

Cerere

# no email needed, one GET

$ curl -s '.../api/v1/infra/check?domain=example.com'

# compare with your last run

$ curl -s '.../api/v1/infra/check?domain=example.com&diff=true' \ | jq '.diff'

Răspuns

200 OK

{
  "domain": "example.com",
  "ok": false,
  "status": "fail",
  "score": 78,
  "coverage": {"answered": 7, "total": 8},
  "sections": {"ptr": {"status": "fail", "core": true}}
}

200 OK

{
  "changed": true,
  "worsened": true,
  "status_from": "pass",
  "score_from": 100,
  "changes": [{"path": "dkim.key.mail.sha256", "kind": "removed",
               "severity": "critical", "effect": "worsened"}]
}
Pe această pagină

Test de e-mail

Citim integral un mesaj real: conținutul, semnătura, anteturile și serverul care l-a trimis. Primești un scor, o listă de remedieri și toate verificările pe care se bazează.

Pornire rapidă

Trei apeluri. Fără cheie, fără cont, fără înregistrare. Două cereri și un e-mail. Al treilea apel există doar pentru că analiza durează câteva secunde.

  1. Rezervă o adresă

    Trimite o cerere POST către endpointul inbox. Primești o adresă care acceptă exact un mesaj și expiră într-o oră, împreună cu identificatorul slug pe baza căruia este indexat tot restul.

    Cerere

    # 1. reserve a single-use address
    curl -sX POST 'https://email-spam-tester.com/api/v1/inbox?lang=en'

    Răspuns

    {
      "address": "test-<slug>@t.email-spam-tester.com",
      "slug": "<slug>",
      "expires_at": "2026-01-01T12:00:00Z"
    }
  2. Trimite-i mesajul real

    Prin SMTP, de pe platforma care va trimite campania. Jumătate dintre verificări citesc anteturile adăugate de platforma de trimitere, astfel încât un mesaj compus manual măsoară altceva.

    Cerere

    # 2. send your message to that address, from your own platform
    To: test-<slug>@t.email-spam-tester.com
  3. Interoghează starea, apoi citește raportul

    Endpointul de stare are câteva sute de octeți și îți spune dacă merită să preiei deja raportul complet. Raportul propriu-zis are câteva mii de linii.

    Cerere

    # 3. poll
    curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>/status'

    Răspuns

    {
      "slug": "<slug>",
      "analysis_status": "checks_ready",
      "ai_status": "running",
      "checks_done": 42,
      "checks_total": 42
    }

    Cerere

    # 4. read the report once analysis_status is checks_ready
    curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>'

    Răspuns

    {
      "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"}}
      ]
    }

Rezervă o adresă, trimite mesajul pe care urma să îl trimiți listei tale, citește raportul. Tot ce afișează pagina se află în JSON, inclusiv scorul, toate cele 42 de verificări cu dovezile lor și secțiunea standardului pe care se bazează fiecare constatare.

Primele 100.000 de rapoarte sunt gratuite, fără cheie și fără cont. Dacă integrezi un agent în locul unui script, serverul MCP este mai potrivit decât interogarea periodică.

Endpointuri

Adresa de bază https://email-spam-tester.com. Totul răspunde cu JSON.

POST/api/v1/inbox

Rezervă o adresă de unică folosință. Ambii parametri sunt opționali.

langLimba în care vor fi scrise planul de remediere și constatările pentru fiecare verificare, sub forma unui cod ISO. Este stabilită acum deoarece mesajul sosește prin SMTP câteva minute mai târziu și nu conține niciun indiciu despre cine îl așteaptă. Pentru un cod necunoscut se folosește implicit engleza.
utm_source, utm_medium, utm_campaignTransmise către sistemul nostru de analiză. Util dacă îți măsori propria integrare.

GET/api/v1/tests/{slug}/status

Poate fi interogat frecvent. Returnează cele două câmpuri de stare și progresul verificărilor, fără nimic altceva.

Interoghează acest endpoint în locul raportului. analysis_status ajunge mai întâi la checks_ready, iar planul AI apare în ai_status aproximativ un minut mai târziu, astfel încât un apelant care dorește doar verificările deterministe nu trebuie să aștepte planul.

GET/api/v1/tests/{slug}

Raportul complet. Răspunde cu 202 cât timp adresa este rezervată și încă nu a sosit nimic, apoi cu 200 după ce mesajul a sosit.

GET/api/v1/tests/{slug}/message

Mesajul exact așa cum a fost livrat: fiecare antet în ordinea transmisiei, ambele corpuri, lista atașamentelor și sursa brută. Este preluat separat deoarece raportul este interogat periodic, iar acesta poate ajunge la un megabyte.

Mesajul brut este șters după propriul său termen, mai devreme decât raportul. După aceea, acest endpoint răspunde cu motivul, nu cu sursa.

PUT/api/v1/tests/{slug}/locale

Schimbă limba unei rezervări care nu a fost încă utilizată. Pentru un agent care află ce limbă citește utilizatorul său după ce a solicitat deja adresa. Refuzată după sosirea mesajului, deoarece până atunci analiza este în curs.

Plasare în inboxBeta

Trimite un mesaj către o listă de căsuțe de primire de test și vezi unde a ajuns la Gmail, Outlook, Yahoo și alți furnizori: Mesaje primite, Promoții sau Spam.

Pornire rapidă

  1. Creează un test

    Trimite o cerere POST către endpointul de plasare. Primești un marcaj și inboxurile de test.

    Cerere

    # 1. create a test
    curl -sX POST 'https://email-spam-tester.com/api/v1/placement' \
      -H 'Content-Type: application/json' \
      -d '{"public_results_accepted":true}'

    Răspuns

    {
      "slug": "<slug>",
      "marker": "est-3f9a1c7e2b4d6a80c5e1f2d3",
      "status": "waiting",
      "deadline": "2026-10-31T12:30:00Z",
      "poll_after_seconds": 60,
      "results": [
        {"address": "<seed>", "provider": "gmail", "kind": "Gmail",
         "placement": "pending", "observed_at": null}
      ],
      "fleet": {
        "status": "observing",
        "results": [
          {"address": "<mailbox>", "provider": "yahoo", "available": true,
           "placement": "pending", "coverage": "pending"}
        ]
      }
    }
  2. Trimite un mesaj către fiecare inbox

    Pune marcajul în subiect și trimite de pe platforma ta obișnuită, către toate adresele dintr-o singură trimitere.

    Cerere

    # 2. one message to every address, with the marker in the subject
    Subject: October invoice est-3f9a1c7e2b4d6a80c5e1f2d3
    To: <seed>, <mailbox>, ...
  3. Interoghează folderele

    Fiecare adresă se completează cu furnizorul și folderul său. Interoghează până când starea nu mai este waiting.

    Cerere

    # 3. poll for the folders
    curl -s 'https://email-spam-tester.com/api/v1/placement/<slug>'

    Răspuns

    {
      "status": "complete",
      "received": 2,
      "total": 2,
      "results": [
        {"address": "<seed>", "provider": "gmail", "kind": "Gmail",
         "placement": "primary", "observed_at": "2026-10-31T12:04:11Z"},
        {"address": "<seed>", "provider": "gmail", "kind": "Google Workspace",
         "placement": "promotions", "observed_at": "2026-10-31T12:04:11Z"}
      ],
      "fleet": {
        "status": "finished",
        "results": [
          {"address": "<mailbox>", "provider": "yahoo", "available": true,
           "placement": "inbox", "coverage": "ok"},
          {"address": "<mailbox>", "provider": "outlook", "available": true,
           "placement": "spam", "coverage": "ok"}
        ]
      }
    }

Endpointuri

An optional test using public GMass seed inboxes and available project test mailboxes, alone or alongside the email score. Explain to the sender that GMass receives their email and publishes its subject, sender name and placement before creating a test. Use all test mailboxes for non-confidential test messages only.

GET /api/v1/placement/availability

Returns providers: the provider identifiers of currently healthy, admitted project mailboxes. No addresses or credentials are exposed. This read does not create a test or contact GMass. Actual recipients are allocated at creation and may differ as availability or capacity changes.

POST /api/v1/placement

Send JSON {"public_results_accepted":true}. Returns HTTP 201 with slug, marker, results (the seed addresses), deadline and expires_at. Limit: 20 tests per IP per UTC day.

For one-send combined testing, first reserve an email score address and include its score_slug in the placement creation JSON. Repeated creation for that score returns the same placement test. Send the marked email to the score address, every returned seed and every available fleet.results address; keep the main /t/<score_slug> report link. Creating a link after the score address was used or expired returns HTTP 409.

GET /api/v1/placement/by-score/{score_slug}

Read and refresh the placement run attached to the main email test. The response has the same format and polling limits as the standalone endpoint below. HTTP 404 means placement was not included or its stored results have been removed.

GET /api/v1/placement/{slug}

Use poll_after_seconds (normally 60 seconds) while the page is open. Upstream errors trigger a shared cooldown. Add the marker to the subject and send through the sender's normal platform to every seed. Observations are saved for 30 days. Collection ends after 30 minutes or when all seeds have results.

status: waiting, complete or timed_out. Each result has an address, provider, kind, placement and observed_at. Placement is primary, promotions, inbox, updates, social, forums, spam, unknown, pending or not_observed. Missing results do not mean Spam; Promotions is an inbox category. provider_error indicates an upstream outage without discarding saved observations. HTTP 404 means unknown, 410 expired, 429 quota exhausted, and 503 no test inboxes available at creation.

The optional fleet object contains independently collected project mailbox results, with status observing, settling or finished. Refresh every 30 seconds until it finishes, even when Gmail has completed. Each fleet result includes address, provider, available, placement, category and coverage. Exclude unavailable addresses from new sends; retain their saved observations. Category data may be unavailable even when the physical folder is known.

If GMass is unavailable at creation but project mailboxes can be allocated, provider is fleet and the top-level seed results are empty. Use fleet.results; do not interpret an empty Gmail list as successful delivery. Existing runs never gain new recipient addresses silently.

Verificarea infrastructurii

O singură solicitare GET verifică configurația de e-mail a unui domeniu fără să trimită nimic, păstrează rezultatul și îți spune ce s-a schimbat de la ultima rulare. Nu este necesară nicio cheie. În cron, linia de mai jos returnează un cod diferit de zero când domeniul are probleme sau configurația sa s-a schimbat într-un mod semnificativ.

Pornire rapidă

  1. Fă o singură cerere GET

    Transmite domeniul. ip adaugă adresele tale de trimitere, iar selector specifică numele selectorilor DKIM de citit.

    Cerere

    curl -s 'https://email-spam-tester.com/api/v1/infra/check?domain=example.com&selector=mail&diff=true'
  2. Citește verdictul

    ok este răspunsul pentru un script, iar sections arată ce parte a eșuat.

    Răspuns

    {
      "id": "ir_01JB8Y4T2M6K9QZ7H3V5N1XWDA",
      "domain": "example.com",
      "checked_at": "2026-10-31T12:00:00Z",
      "ok": false,
      "status": "fail",
      "score": 78,
      "coverage": {"answered": 7, "total": 8},
      "ips": [{"ip": "203.0.113.5", "sources": ["mx", "spf"], "managed": false}],
      "sections": {
        "dkim": {"status": "pass", "core": true, "findings": [], "data": {}},
        "ptr": {"status": "fail", "core": true, "findings": [], "data": {}}
      },
      "not_checked": [
        {"check": "dkim_signature", "reason": "needs_a_message"},
        {"check": "alignment", "reason": "needs_a_message"}
      ],
      "diff": {
        "baseline": {"id": "ir_01JB2...", "checked_at": "2026-10-24T12:00:00Z"},
        "first_run": false,
        "changed": true,
        "worsened": true,
        "status_from": "pass",
        "score_from": 100,
        "changes": [
          {"path": "dkim.key.mail.sha256", "section": "dkim", "kind": "removed",
           "severity": "critical", "effect": "worsened", "from": "9f2c...", "to": null}
        ],
        "not_compared": [
          {"path": "blocklist_ip.203.0.113.5.bl.spamcop.net.listed", "reason": "lookup_failed"}
        ]
      }
    }
  3. Adaugă-l în cron

    Cu diff=true, fiecare rulare este comparată cu ultima ta rulare, iar jq transformă răspunsul într-un cod de ieșire.

    Cerere

    # exits non-zero if the domain is broken or its setup changed
    curl -s 'https://email-spam-tester.com/api/v1/infra/check?domain=example.com&selector=mail&diff=true' \
      | jq -e '.ok and (.diff.changed | not)'
domainObligatoriu. Acceptă ce acceptă instrumentele: un domeniu, un URL, o adresă de e-mail.
ipAdresa ta de trimitere. Repet-o pentru mai multe, până la 6.
selectorUn selector DKIM. Repetă-l pentru mai multe, până la 10. Fiecare selector pe care îl trimiți trebuie să existe, altfel secțiunea DKIM eșuează.
heloNumele pe care serverul tău îl furnizează în HELO, comparat cu înregistrarea sa PTR.
accountPentru cine este solicitarea. Obligatoriu cu o cheie care deservește mai multe persoane.
checksSecțiunile care trebuie rulate, separate prin virgulă. Toate în mod implicit.
difftrue compară această rulare cu ultima ta rulare a domeniului.
since7d, 12h sau o dată ISO 8601. Compară cu rularea ta cea mai apropiată de acel moment într-un interval de 12 ore, iar dacă nu există, cu ultima rulare dinaintea acestuia. Activează diff.
baselineID-ul uneia dintre rulările tale cu care se face comparația. Activează diff.
freshtrue omite memoria cache de 60 de secunde.

Citirea răspunsului

O verificare finalizată răspunde cu 200, iar verdictul se află în corp. status este cea mai slabă stare dintre secțiunile obligatorii: spf, dkim, dmarc, ptr, blocklist_ip, blocklist_domain, mx și smtp. unknown într-o secțiune obligatorie este considerat warn. ok este true când status este pass sau warn. score variază de la 0 la 100 pentru secțiunile obligatorii care au răspuns și este null când erorile și valorile unknown lasă mai puțin de jumătate din ponderea aplicabilă. mta_sts, tls_rpt, bimi, dnssec, dane, ns și registration sunt raportate și comparate, dar nu afectează ok sau score.

O secțiune poate fi pass, warn, fail, error (nu am putut verifica), unknown (prea puține informații pentru o concluzie) sau skipped (nu se aplică). skipped nu are niciun efect asupra rezultatului, iar motivul se află în not_checked. dkim_signature și alignment sunt întotdeauna prezente, deoarece necesită un mesaj real.

Ce schimbă ip și selector

PTR și listele de blocare se referă la adrese, așa că o rulare are nevoie de unele. Folosește valorile ip pe care le trimiți. Dacă nu trimiți niciuna, preia până la patru de la gazdele tale MX și din termenii ip4: și ip6: cu o singură adresă din înregistrarea SPF rădăcină. Adresele unui furnizor de e-mail cunoscut sunt marcate ca managed și nu sunt verificate, iar dacă nu mai rămâne nimic, ptr și blocklist_ip răspund cu skipped. Un selector nu poate fi citit din DNS, așa că o rulare le încearcă pe al tău, pe cele găsite de rulările tale anterioare și o listă de nume uzuale. Faptul că nu găsește nimic nu dovedește nimic, iar dkim răspunde cu unknown. Dacă trimiți de pe propriul server, transmite-le pe ambele.

Ce s-a schimbat

Fiecare intrare din diff.changes are un path, un kind (added, removed, changed), o severity (critical, warning, info) și un effect (worsened, improved, neutral). Numai critical și warning setează diff.changed, astfel încât o cheie DKIM rotită de aceeași lungime, o adresă MX nouă sau un certificat reînnoit nu duc la eșecul liniei cron. diff.worsened urmează efectul oricărei modificări. La prima rulare nu există nimic cu care să se facă comparația, iar diff.first_run indică acest lucru.

O referință este întotdeauna una dintre rulările tale, așa că verificarea domeniului de către altcineva între două dintre rulările tale nu ascunde nimic. Orice nu am putut citi de data aceasta ajunge în diff.not_compared, păstrându-se ultima valoare cunoscută, ceea ce înseamnă că o modificare făcută în timpul unei întreruperi apare după ce interogarea funcționează din nou. O rulare cu un ip sau selector diferit rămâne în aceeași serie, iar ceea ce nu a solicitat nu este nici comparat.

De ce o verificare programată ar trebui să folosească o cheie

Fără o cheie, istoricul tău aparține unui hash cu cheie al adresei tale IP, așa că se încheie când adresa se schimbă, iar persoanele din spatele aceleiași adrese îl partajează: rularea unui coleg îți mută referința. Cu o cheie API personală în Authorization: Bearer, istoricul urmează cheia. Rulările cu o cheie sunt păstrate timp de 365 de zile și pot fi deschise numai cu acea cheie. Rulările fără cheie sunt păstrate timp de 30 de zile și pot fi deschise de oricine le are ID-ul.

6 solicitări pe minut și 50 pe zi pentru fiecare IP sau 30 și 500 pentru fiecare cheie. Peste această limită, răspunsul este 429 cu Retry-After. O solicitare identică în interval de 60 de secunde provine din memoria cache, este marcată cached: true, nu scrie nicio rulare și nu este contorizată. Citirea rulărilor stocate permite 120 de solicitări pe minut pentru fiecare client. 503 cu Retry-After înseamnă că rulează prea multe verificări sau, la citirea rulărilor stocate, că spațiul de stocare nu este disponibil. 401 indică o cheie greșită. 422 include detail.code: invalid_domain, invalid_ip, invalid_selector, invalid_check, invalid_since, unknown_baseline sau account_required.

Endpointuri

GET/api/v1/infra/check

Rulează verificarea. Parametrii sunt în tabelul de mai sus.

GET/api/v1/infra/runs/{public_id}

O execuție stocată, în întregime. 404 dacă nu există sau aparține altei chei.

GET/api/v1/infra/domains/{domain}/runs

Execuțiile tale pentru un domeniu, de la cea mai nouă: id, oră, stare, scor și număr de modificări. Acceptă limit (de la 1 la 100, implicit 30) și before, un id de execuție.

GET/api/v1/infra/diff

Aceeași comparație între două execuții stocate, ?from=<id>&to=<id>. Ai nevoie de acces la ambele.

GET/api/v1/infra/checks

Fiecare secțiune cu ponderea sa, versiunea scorului și limitele.

Verificări individuale

Fiecare apel răspunde la o întrebare și nu păstrează niciun istoric. Un instrument rulează singur o parte a verificării infrastructurii, cu excepția instrumentului pentru anteturi, care citește un mesaj pe care l-ai primit deja.

Pornire rapidă

  1. Alege o verificare

    Alege instrumentul din lista de mai jos și transmite domeniul, adresa sau IP-ul solicitat.

    Cerere

    curl -s 'https://email-spam-tester.com/api/v1/tools/spf?domain=example.com'
  2. Citește starea și constatările

    Fiecare instrument răspunde cu o stare și constatările sale. Câmpurile de după acestea depind de instrument.

    Răspuns

    {
      "tool": "spf",
      "query": {"domain": "example.com"},
      "checked_at": "2026-10-31T12:00:00Z",
      "duration_ms": 412,
      "status": "fail",
      "findings": [
        {"code": "spf.too_many_lookups", "level": "fail",
         "params": {"limit": 10, "count": 12},
         "message": "RFC 7208 §4.6.4 allows at most 10 DNS lookups, and this record needs 12, so receivers return permerror."}
      ],
      "record": "v=spf1 include:_spf.example.net ~all",
      "lookups": {"count": 12, "limit": 10, "void": 0}
    }

Endpointuri

Toate răspund cu 200, cu un status și o listă de constatări, fiecare cu un cod și parametrii săi. Statusul este pass, warn, fail sau error, iar un instrument partajat cu verificarea infrastructurii poate răspunde și cu unknown sau skipped. O interogare care a expirat sau o listă care a refuzat interogarea nu este considerată niciodată pass. 30 de solicitări pe minut și 300 pe zi per IP pentru toate instrumentele; peste această limită, răspunsul este 429 cu Retry-After.

GET/api/v1/tools/spf

Înregistrarea SPF a unui domeniu: sintaxa sa, fiecare include și redirect urmărit și numărul de interogări DNS consumate de întregul arbore din limita de zece. Transmite ?domain=example.com.

GET/api/v1/tools/dmarc

Înregistrarea DMARC a unui domeniu sau a domeniului său organizațional atunci când acesta nu are una: etichetele, politica și dacă fiecare adresă externă pentru rapoarte a acceptat să primească rapoarte. Transmite ?domain=example.com.

GET/api/v1/tools/dkim

Cheia DKIM publicată pentru un selector: dacă există și poate fi decodificată, tipul și dimensiunea sa și indicatoarele de revocare și testare. Transmite ?domain=example.com&selector=s1.

GET/api/v1/tools/blocklist

O adresă IPv4, o adresă IPv6 sau un domeniu verificat în listele de blocare DNS utilizate de raport, împreună cu răspunsul fiecărei liste. Transmite ?target=203.0.113.5.

GET/api/v1/tools/mx

Înregistrările MX ale unui domeniu în ordinea în care expeditorii le încearcă, cu adresele IPv4 și IPv6 ale fiecărei gazde. Sunt raportate Null MX, un domeniu fără MX, gazdele care sunt adrese IP sau CNAME și gazdele care nu se rezolvă, precum și înregistrările MTA-STS și TLS-RPT. Trimite ?domain=example.com.

GET/api/v1/tools/bimi

Configurația BIMI a unui domeniu în patru pași: politica DMARC necesară pentru BIMI, înregistrarea de la default._bimi, sigla SVG verificată în raport cu profilul Tiny PS și certificatul mărcii, cu tipul, domeniile și data expirării. Trimite ?domain=example.com și &selector= pentru un selector diferit de default.

GET/api/v1/tools/ptr

Înregistrările PTR ale unei adrese și dacă vreunul dintre acele nume se rezolvă înapoi la aceasta. O interogare care a eșuat returnează starea error; o înregistrare lipsă returnează starea fail. Trimite ?ip=8.8.8.8.

GET/api/v1/tools/mta-sts

Înregistrarea MTA-STS a unui domeniu și fișierul de politică la care indică: modul, gazdele enumerate și orice gazdă MX pe care politica o omite. Trimite ?domain=example.com.

GET/api/v1/tools/tls-rpt

Înregistrarea TLS-RPT a unui domeniu și adresele care primesc rapoartele acesteia. Trimite ?domain=example.com.

GET/api/v1/tools/dnssec

Dacă zona unui domeniu este semnată, nesemnată sau defectă, conform înregistrărilor DNSKEY și DS. O semnătură incorectă este diferențiată de o întrerupere a resolverului. Trimite ?domain=example.com.

GET/api/v1/tools/dane

Înregistrările TLSA ale gazdelor MX, comparate cu certificatul prezentat de o gazdă atunci când certificatul a putut fi citit. Trimite ?domain=example.com.

GET/api/v1/tools/smtp

STARTTLS și certificatul de pe primele două gazde MX: versiunea TLS, emitentul, data expirării și dacă lanțul și numele sunt valide. Ne conectăm numai la gazdele din domeniul despre care ai întrebat și omitem furnizorii de e-mail, iar un rezultat per adresă este partajat timp de 6 ore. Nu se trimite niciun e-mail. Trimite ?domain=example.com.

GET/api/v1/tools/ns

Serverele de nume ale unui domeniu și dacă zona sa are o înregistrare SOA. Un singur server de nume este un warn. Trimite ?domain=example.com.

GET/api/v1/tools/registration

Când expiră înregistrarea unui domeniu, conform RDAP. Mai puțin de 30 de zile rămase reprezintă un warn. O zonă fără serviciu RDAP răspunde cu skipped. Trimite ?domain=example.com.

POST/api/v1/tools/header

Antetele unui mesaj primit, trimise ca JSON {"headers": "..."} sau ca text/plain: ruta salt cu salt, cu întârzieri, TLS și decalajul ceasului, Authentication-Results propriu al destinatarului, alinierea domeniilor From, DKIM d= și Return-Path și antetele DKIM, ARC, de dezabonare și ale filtrelor de spam. Tot ce urmează după prima linie goală este eliminat fără a fi citit. Antetele sunt procesate în memorie și nu sunt stocate, păstrate în cache sau jurnalizate.

Verifică domeniul în fiecare noapte.
Testează e-mailul înainte să fie trimis.

Comune tuturor produselor

Accesul, cheile, formatul raportului, stările, erorile, plus OpenAPI și llms.txt pentru mașini.

Autentificare

Nu există. Nicio cheie de solicitat, niciun antet de setat, niciun cont de creat. Slugul pe care îl primești este capabilitatea: oricine îl deține poate citi raportul respectiv și nimeni altcineva nu îl poate ghici.

Aceasta înseamnă și că un slug trebuie tratat ca o parolă. Un raport afișează subiectul, expeditorul, adresa pentru mesajele returnate și sursa completă a mesajului oricărei persoane care deține linkul.

Chei API personale

Everything above works without a key. A key is for automation platforms such as Zapier, where every user's calls come from the platform's servers and per-IP limits would be shared by all of them. With a key, limits count per key (50 tests a day, 3 with placement, 5 permanent mailboxes), the key's tests form a history, and the key can keep permanent mailboxes whose reports only it can read. Send the key as Authorization: Bearer est_live_… on any call on this page. The routes below also take account, a short name of your choosing ([A-Za-z0-9_-], up to 64 characters) that keeps separate lists under one key. GET /api/v1/installations/tests requires it; pass the same one on POST /api/v1/inbox so the test shows up there. The Zapier integration uses zapier.

POST /api/v1/keys

Send JSON {"email":"you@example.com"}. Returns HTTP 201 with key and email. The key is shown once; only its hash is kept. Asking again gives a new key and leaves the earlier ones working. Limit: 5 keys per IP per UTC day. The form on /zapier/ calls this.

GET /api/v1/keys/me

Returns email, key_prefix and created_at of the key in the header, or HTTP 401. Use it to check a key.

GET /api/v1/installations/tests

The key's tests, newest first: ?account=…&limit=50 (up to 100), and before=<slug> for the next page. Each item has slug, created_at, analysis_status (waiting or expired before an email arrived), score_ours, score_compat, placement and changes, the checks that moved since the previous test of the same sending domain. Read the full report at /api/v1/tests/{slug}.

POST /api/v1/installations/mailboxes

Send JSON {"domain":"example.com","account":"…"}. Returns the permanent mailbox of that sending domain: id, address, domain, state, daily_cap and created. HTTP 201 when it is new, 200 when it already existed, 409 when the key keeps as many mailboxes as it may. Subscribe the address to a newsletter or a sequence and every email that arrives is checked. GET on the same path with ?account=… lists them, and DELETE /api/v1/installations/mailboxes/{mailbox_id} stops one.

GET /api/v1/installations/mailboxes/{mailbox_id}/letters

The emails that arrived, oldest first, paged with after_id and next_after_id. settled=true ends the page before the first email still being checked, so paging never skips one. newest=true turns the order round, for a quick look at the latest; settled does nothing with it. Each has test_id, slug, received_at, analysis_status, score_ours, score_compat, subject, from_addr and kind.

GET /api/v1/installations/letters/{slug}

The report of one email in a permanent mailbox, the same JSON as /api/v1/tests/{slug} with report_url null: there is no public page for it. HTTP 410 once the report has expired.

Citirea raportului

Câmpurile care conțin răspunsul, în ordinea în care probabil le dorești.

score_oursDe la 0 la 100. Modelul nostru. Autentificarea și infrastructura au cea mai mare pondere, deoarece ele decid livrarea înainte ca un filtru să citească vreun cuvânt din text.
score_compatDe la 0 la 10. Reproduce valoarea în stil SpamAssassin pe care oamenii o compară deja, astfel încât raportul să poată fi comparat cu ceea ce a văzut cineva în altă parte.
subscoresAceeași scară de la 0 la 100 pentru fiecare secțiune: auth, infra_spam, content, compliance.
checks[]Toate cele 42, fiecare cu o stare, o constatare pe un singur rând, dovezile pe baza cărora a fost stabilită și impactul asupra celor două scoruri.
checks[].citationsDe unde provine constatarea: secțiunea din RFC, citată textual, și pagina unde Google își precizează propria cerință. Selectate manual, nu generate, astfel încât să fie de încredere.
fixes[]Ce trebuie schimbat, în ordine, împreună cu punctele pe care le valorează fiecare schimbare. Câștigurile sunt calculate prin reevaluarea raportului, nu estimate.
completeFals atunci când o verificare nu a putut rula. Un element neverificat nu este niciodată unul trecut, deci consideră scorul optimist până când această valoare devine adevărată.
report_urlPagina într-un format ușor de citit. Dă-o unei persoane în locul unui zid de JSON.

Stări

O verificare are una dintre cinci stări, iar diferența dintre două dintre ele contează mai mult decât pare.

passVerificarea a rulat și nu a găsit nimic în neregulă.
warnMerită remediat. Costă puncte.
failVa afecta livrarea. Costă mai multe puncte.
omisNu s-a aplicat. Niciun atașament de scanat, nicio parte HTML de evaluat. Nu este o trecere.
eroareNu am putut determina rezultatul. Este exclus din scor și semnalat, în loc să fie considerat o trecere.

analysis_status trece prin received, analyzing, checks_ready, failed. ai_status trece prin pending, running, ready, fallback, error. Raportul determinist este final la checks_ready; ai_status doar adaugă planul.

Ce poate fi returnat

202Adresa este rezervată și nu a sosit niciun mesaj. Corpul răspunsului conține adresa, data expirării și limba, astfel încât un apelant care nu a creat rezervarea o poate afișa în continuare.
404Nu există un astfel de slug. Fie nu a existat niciodată, fie rezervarea a fost uitată.
410Adresa a expirat înainte de sosirea unui mesaj.
409Ai încercat să schimbi limba după ce mesajul sosise deja.
429Limita de teste gratuite pentru adresa ta. În prezent, acest serviciu nu are o limită per persoană; dacă va fi stabilită vreodată una, corpul răspunsului indică momentul la care se resetează.

Patru lucruri de știut

Un mesaj per adresă

Al doilea este refuzat. Raportul anterior rămâne intact, acesta fiind scopul.

O oră pentru utilizare

Adresa expiră; raportul nu. Linkurile rapoartelor sunt permanente, astfel încât unul inserat într-un tichet continuă să funcționeze.

Trimite de pe platformă

Testarea unei campanii dintr-un cont personal măsoară acel cont. Aproape totul din secțiunea de autentificare se referă la infrastructura de trimitere, nu la text.

Retestează după remediere

Îmbunătățirile estimate sunt calculate pentru câte o remediere și nu se cumulează. Al doilea raport indică valoarea reală.

Pentru sisteme automate

GET/api/health

Stare activă. Fără autentificare, fără efecte secundare.

Încearcă mai întâi unul manual

Durează aproximativ un minut și îți arată exact ceea ce descrie JSON.

Obține o adresă de test

Sandbox.

Fiecare endpoint, cu un buton care îl rulează pe serviciul live. Nimic de aici nu necesită o cheie, așadar o solicitare pe care o trimiți de pe această pagină este una reală: rezervă o adresă reală și este contorizată.

Încearcă în sandbox