API ελέγχου spam για email,
εισερχόμενα και τομέα
Στείλτε μας ένα πραγματικό μήνυμα ή δώστε μας μόνο έναν τομέα. Όλα επιστρέφονται σε JSON.
Χωρίς κλειδί, χωρίς λογαριασμό.
Αίτημα
# 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'
Απόκριση
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}]
}Αίτημα
# 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'
Απόκριση
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"}
]}
}Αίτημα
# 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'
Απόκριση
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"}]
}Επιλέξτε αυτό που χρειάζεστε
Σε αυτήν τη σελίδα
Δοκιμή email
Διαβάζουμε ένα πραγματικό μήνυμα από την αρχή μέχρι το τέλος: περιεχόμενο, υπογραφή, κεφαλίδες και τον διακομιστή που το έστειλε. Λαμβάνετε μια βαθμολογία, μια λίστα διορθώσεων και κάθε έλεγχο στον οποίο βασίζονται.
Γρήγορη εκκίνηση
Τρεις κλήσεις. Χωρίς κλειδί, χωρίς λογαριασμό, χωρίς εγγραφή. Δύο αιτήματα και ένα email. Η τρίτη κλήση υπάρχει μόνο επειδή η ανάλυση διαρκεί λίγα δευτερόλεπτα.
Δεσμεύστε μια διεύθυνση
Στείλτε POST στο endpoint του inbox. Λαμβάνετε μια διεύθυνση που δέχεται ακριβώς ένα μήνυμα και λήγει σε μία ώρα, καθώς και το slug που χρησιμοποιείται ως κλειδί για όλα τα υπόλοιπα.
Αίτημα
# 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" }Στείλτε σε αυτή το πραγματικό μήνυμα
Μέσω SMTP, από την πλατφόρμα που θα στείλει την καμπάνια. Οι μισοί έλεγχοι διαβάζουν κεφαλίδες που προσθέτει η πλατφόρμα αποστολής σας, επομένως ένα μήνυμα που συντάχθηκε χειροκίνητα μετρά το λάθος πράγμα.
Αίτημα
# 2. send your message to that address, from your own platform To: test-<slug>@t.email-spam-tester.comΕλέγξτε περιοδικά την κατάσταση και μετά διαβάστε την αναφορά
Το endpoint κατάστασης έχει μέγεθος μερικών εκατοντάδων byte και σας ενημερώνει αν αξίζει να ανακτηθεί ήδη η πλήρης αναφορά. Η ίδια η αναφορά εκτείνεται σε αρκετές χιλιάδες γραμμές.
Αίτημα
# 3. poll curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>/status'Απόκριση
{ "slug": "<slug>", "analysis_status": "checks_ready", "ai_status": "running", "checks_done": 42, "checks_total": 42 }Αίτημα
# 4. 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"}} ] }
Δεσμεύστε μια διεύθυνση, στείλτε το μήνυμα που επρόκειτο να στείλετε στη λίστα σας, διαβάστε την αναφορά. Όλα όσα εμφανίζει η σελίδα περιλαμβάνονται στο JSON, μαζί με τη βαθμολογία, και τους 42 ελέγχους με τα τεκμήριά τους, καθώς και την ενότητα του προτύπου στην οποία βασίζεται κάθε εύρημα.
Οι πρώτες 100.000 αναφορές είναι δωρεάν, χωρίς κλειδί και χωρίς λογαριασμό. Αν συνδέετε έναν agent αντί για ένα script, ο διακομιστής MCP είναι καταλληλότερος από το polling.
Τελικά σημεία
Βασική διεύθυνση https://email-spam-tester.com. Όλα αποκρίνονται με JSON.
POST/api/v1/inbox
Δεσμεύει μια διεύθυνση μίας χρήσης. Και οι δύο παράμετροι είναι προαιρετικές.
| lang | Η γλώσσα στην οποία θα γραφτούν το σχέδιο διόρθωσης και τα ευρήματα ανά έλεγχο, ως κωδικός ISO. Καθορίζεται τώρα, επειδή το μήνυμα φτάνει μέσω SMTP λίγα λεπτά αργότερα και δεν περιέχει καμία ένδειξη για το ποιος το περιμένει. Ένας άγνωστος κωδικός χρησιμοποιεί ως εναλλακτική τα Αγγλικά. |
| utm_source, utm_medium, utm_campaign | Προωθούνται στα αναλυτικά στοιχεία μας. Χρήσιμο αν μετράτε τη δική σας ενσωμάτωση. |
GET/api/v1/tests/{slug}/status
Η συχνή εκτέλεση αιτημάτων είναι οικονομική. Επιστρέφει τα δύο πεδία κατάστασης και μέχρι πού έχουν φτάσει οι έλεγχοι, και τίποτε άλλο.
GET/api/v1/tests/{slug}
Ολόκληρη η αναφορά. Αποκρίνεται με 202 όσο η διεύθυνση είναι δεσμευμένη και δεν έχει φτάσει ακόμη τίποτα, και με 200 μόλις φτάσει.
GET/api/v1/tests/{slug}/message
Το μήνυμα ακριβώς όπως παραδόθηκε: κάθε κεφαλίδα με τη σειρά μετάδοσης, και τα δύο σώματα, η λίστα συνημμένων και η ακατέργαστη πηγή. Ανακτάται ξεχωριστά, επειδή η αναφορά ελέγχεται επανειλημμένα και αυτό μπορεί να φτάσει το ένα megabyte.
PUT/api/v1/tests/{slug}/locale
Αλλάζει τη γλώσσα μιας κράτησης που δεν έχει χρησιμοποιηθεί ακόμη. Για έναν agent που μαθαίνει ποια γλώσσα διαβάζει ο χρήστης του αφού έχει ήδη ζητήσει τη διεύθυνση. Απορρίπτεται μόλις φτάσει το μήνυμα, επειδή μέχρι τότε εκτελείται ήδη η ανάλυση.
Τοποθέτηση στα εισερχόμεναΔοκιμαστική έκδοση
Στείλτε ένα μήνυμα σε μια λίστα δοκιμαστικών εισερχομένων και δείτε πού κατέληξε στο Gmail, το Outlook, το Yahoo και άλλους παρόχους: Εισερχόμενα, Προσφορές ή Ανεπιθύμητα.
Γρήγορη εκκίνηση
Δημιουργήστε μια δοκιμή
Κάντε POST στο endpoint τοποθέτησης. Λαμβάνετε έναν δείκτη και τα δοκιμαστικά γραμματοκιβώτια.
Αίτημα
# 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}'Απόκριση
{ "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. one message to every address, with the marker in the subject Subject: October invoice est-3f9a1c7e2b4d6a80c5e1f2d3 To: <seed>, <mailbox>, ...Ελέγξτε επανειλημμένα τους φακέλους
Για κάθε διεύθυνση συμπληρώνονται ο πάροχος και ο φάκελός της. Ελέγχετε επανειλημμένα μέχρι η κατάσταση να πάψει να είναι waiting.
Αίτημα
# 3. poll for the folders curl -s 'https://email-spam-tester.com/api/v1/placement/<slug>'Απόκριση
{ "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"} ] } }
Τελικά σημεία
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.
Έλεγχος υποδομής
Ένα αίτημα GET ελέγχει τη ρύθμιση email ενός τομέα χωρίς να στείλει τίποτα, διατηρεί το αποτέλεσμα και σας ενημερώνει τι άλλαξε από την τελευταία εκτέλεσή σας. Δεν απαιτείται κλειδί. Στο cron, η παρακάτω γραμμή τερματίζεται με μη μηδενικό κωδικό όταν ο τομέας είναι προβληματικός ή η ρύθμισή του άλλαξε με τρόπο που έχει σημασία.
Γρήγορη εκκίνηση
Κάντε ένα GET
Περάστε το domain. Το ip προσθέτει τις διευθύνσεις αποστολής σας, και το selector ορίζει τους επιλογείς DKIM προς ανάγνωση.
Αίτημα
curl -s 'https://email-spam-tester.com/api/v1/infra/check?domain=example.com&selector=mail&diff=true'Διαβάστε το αποτέλεσμα
Το ok είναι η απάντηση για ένα script, και το sections δείχνει ποιο μέρος απέτυχε.
Απόκριση
{ "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"} ] } }Βάλτε το στο cron
Με diff=true κάθε εκτέλεση συγκρίνεται με την τελευταία σας, και το jq μετατρέπει την απάντηση σε κωδικό εξόδου.
Αίτημα
# 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)'
| domain | Απαιτείται. Δέχεται ό,τι δέχονται τα εργαλεία: έναν τομέα, ένα URL, μια διεύθυνση email. |
| ip | Η διεύθυνση αποστολής σας. Επαναλάβετε την παράμετρο για περισσότερες διευθύνσεις, έως 6. |
| selector | Ένας επιλογέας DKIM. Επαναλάβετε την παράμετρο για περισσότερους επιλογείς, έως 10. Κάθε επιλογέας που περνάτε πρέπει να υπάρχει, διαφορετικά η ενότητα dkim αποτυγχάνει. |
| helo | Το όνομα που δίνει ο διακομιστής σας στο HELO, σε σύγκριση με το PTR του. |
| account | Για ποιον προορίζεται το αίτημα. Απαιτείται με ένα κλειδί που εξυπηρετεί πολλά άτομα. |
| checks | Οι ενότητες που θα εκτελεστούν, διαχωρισμένες με κόμματα. Όλες από προεπιλογή. |
| diff | Η τιμή true συγκρίνει αυτή την εκτέλεση με την τελευταία εκτέλεση του domain σας. |
| since | 7d, 12h ή μια ημερομηνία ISO 8601. Συγκρίνει με την εκτέλεσή σας που είναι πλησιέστερη σε εκείνη τη χρονική στιγμή εντός 12 ωρών, διαφορετικά με την τελευταία πριν από αυτή. Ενεργοποιεί το diff. |
| baseline | Το αναγνωριστικό μίας από τις εκτελέσεις σας με την οποία θα γίνει σύγκριση. Ενεργοποιεί το diff. |
| fresh | Η τιμή true παρακάμπτει την cache των 60 δευτερολέπτων. |
Ανάγνωση της απάντησης
Ένας έλεγχος που ολοκληρώθηκε απαντά με 200 και η ετυμηγορία βρίσκεται στο σώμα. Το status είναι το χειρότερο αποτέλεσμα από τις απαιτούμενες ενότητες: spf, dkim, dmarc, ptr, blocklist_ip, blocklist_domain, mx και smtp. Το unknown σε μια απαιτούμενη ενότητα υπολογίζεται ως warn. Το ok είναι true όταν το status είναι pass ή warn. Το score κυμαίνεται από 0 έως 100 για τις απαιτούμενες ενότητες που απάντησαν και είναι null όταν τα errors και unknowns αφήνουν λιγότερο από το μισό του βάρους που εφαρμόζεται. Τα mta_sts, tls_rpt, bimi, dnssec, dane, ns και registration αναφέρονται και συγκρίνονται, αλλά δεν επηρεάζουν το ok ή το score.
Μια ενότητα μπορεί να είναι pass, warn, fail, error (δεν μπορέσαμε να την ελέγξουμε), unknown (πολύ λίγα στοιχεία για συμπέρασμα) ή skipped (δεν εφαρμόζεται). Το skipped δεν επηρεάζει το αποτέλεσμα και ο λόγος βρίσκεται στο not_checked. Τα dkim_signature και alignment υπάρχουν πάντα, επειδή χρειάζονται πραγματικό μήνυμα.
Τι αλλάζουν τα ip και selector
Το PTR και οι λίστες αποκλεισμού αφορούν διευθύνσεις, επομένως μια εκτέλεση χρειάζεται κάποιες. Χρησιμοποιεί τις τιμές ip που διαβιβάζετε. Αν δεν διαβιβάσετε καμία, λαμβάνει έως τέσσερις από τους κεντρικούς υπολογιστές MX σας και από όρους ip4: και ip6: με μία διεύθυνση στη βασική εγγραφή SPF. Οι διευθύνσεις ενός γνωστού παρόχου αλληλογραφίας αναφέρονται ως managed και δεν ελέγχονται, και αν δεν απομείνει καμία, τα ptr και blocklist_ip απαντούν skipped. Ένας selector δεν μπορεί να διαβαστεί από το DNS, επομένως μια εκτέλεση δοκιμάζει τον δικό σας, όσους βρήκαν οι προηγούμενες εκτελέσεις σας και μια λίστα κοινών ονομάτων. Αν δεν βρεθεί τίποτα, αυτό δεν αποδεικνύει τίποτα και το dkim απαντά unknown. Αν στέλνετε από τον δικό σας διακομιστή, διαβιβάστε και τα δύο.
Τι άλλαξε
Κάθε καταχώριση στο diff.changes έχει ένα path, ένα kind (added, removed, changed), ένα severity (critical, warning, info) και ένα effect (worsened, improved, neutral). Μόνο τα critical και warning ορίζουν το diff.changed, επομένως ένα κλειδί DKIM που αντικαταστάθηκε από άλλο ίδιου μήκους, μια νέα διεύθυνση MX ή ένα ανανεωμένο πιστοποιητικό δεν προκαλεί αποτυχία της γραμμής cron. Το diff.worsened ακολουθεί το effect οποιασδήποτε αλλαγής. Στην πρώτη εκτέλεση δεν υπάρχει κάτι για σύγκριση και το diff.first_run το δηλώνει.
Η γραμμή βάσης είναι πάντα μία δική σας εκτέλεση, επομένως αν κάποιος άλλος ελέγξει τον τομέα μεταξύ δύο δικών σας εκτελέσεων, δεν αποκρύπτεται τίποτα. Οτιδήποτε δεν μπορέσαμε να διαβάσουμε αυτή τη φορά μεταφέρεται στο diff.not_compared με διατηρημένη την τελευταία γνωστή τιμή του, πράγμα που σημαίνει ότι μια αλλαγή που έγινε κατά τη διάρκεια μιας διακοπής εμφανίζεται μόλις λειτουργήσει ξανά η αναζήτηση. Μια εκτέλεση με διαφορετικό ip ή selector παραμένει στην ίδια σειρά και ό,τι δεν ζήτησε να ελεγχθεί επίσης δεν συγκρίνεται.
Γιατί ένας προγραμματισμένος έλεγχος πρέπει να χρησιμοποιεί κλειδί
Χωρίς κλειδί, το ιστορικό σας ανήκει σε ένα κρυπτογραφικό αποτύπωμα με κλειδί της διεύθυνσης IP σας, επομένως τερματίζεται όταν αλλάξει η διεύθυνση και τα άτομα πίσω από μία διεύθυνση το μοιράζονται: η εκτέλεση ενός συναδέλφου μετακινεί τη γραμμή βάσης σας. Με ένα προσωπικό κλειδί API στο Authorization: Bearer, το ιστορικό ακολουθεί το κλειδί. Οι εκτελέσεις με κλειδί διατηρούνται για 365 ημέρες και είναι προσβάσιμες μόνο με αυτό το κλειδί. Οι εκτελέσεις χωρίς κλειδί διατηρούνται για 30 ημέρες και είναι προσβάσιμες σε οποιονδήποτε έχει το id τους.
6 αιτήματα ανά λεπτό και 50 ανά ημέρα για κάθε IP ή 30 και 500 για κάθε κλειδί. Πάνω από αυτό το όριο, η απάντηση είναι 429 με Retry-After. Ένα πανομοιότυπο αίτημα εντός 60 δευτερολέπτων προέρχεται από προσωρινή μνήμη, επισημαίνεται ως cached: true, δεν καταγράφει εκτέλεση και δεν προσμετράται. Η ανάγνωση αποθηκευμένων εκτελέσεων επιτρέπει 120 αιτήματα ανά λεπτό για κάθε πρόγραμμα-πελάτη. Το 503 με Retry-After σημαίνει ότι εκτελούνται πάρα πολλοί έλεγχοι ή, κατά την ανάγνωση αποθηκευμένων εκτελέσεων, ότι το σύστημα αποθήκευσης δεν είναι διαθέσιμο. Το 401 σημαίνει λανθασμένο κλειδί. Το 422 περιέχει στο detail.code: invalid_domain, invalid_ip, invalid_selector, invalid_check, invalid_since, unknown_baseline ή account_required.
Τελικά σημεία
GET/api/v1/infra/check
Εκτελεί τον έλεγχο. Οι παράμετροι βρίσκονται στον παραπάνω πίνακα.
GET/api/v1/infra/runs/{public_id}
Μία αποθηκευμένη εκτέλεση, ολόκληρη. 404 αν δεν υπάρχει ή αν ανήκει σε άλλο κλειδί.
GET/api/v1/infra/domains/{domain}/runs
Οι εκτελέσεις σας για έναν τομέα, πρώτα οι νεότερες: αναγνωριστικό, χρόνος, κατάσταση, βαθμολογία και αριθμός αλλαγών. Δέχεται limit (1 έως 100, 30 από προεπιλογή) και before, ένα αναγνωριστικό εκτέλεσης.
GET/api/v1/infra/diff
Η ίδια σύγκριση μεταξύ δύο αποθηκευμένων εκτελέσεων, ?from=<id>&to=<id>. Χρειάζεστε πρόσβαση και στις δύο.
GET/api/v1/infra/checks
Κάθε ενότητα με τη βαρύτητά της, την έκδοση βαθμολογίας και τα όρια.
Μεμονωμένοι έλεγχοι
Κάθε κλήση απαντά σε μία ερώτηση και δεν διατηρεί ιστορικό. Ένα εργαλείο εκτελεί αυτόνομα ένα μέρος του ελέγχου υποδομής, εκτός από το εργαλείο κεφαλίδων, το οποίο διαβάζει ένα μήνυμα που έχετε ήδη λάβει.
Γρήγορη εκκίνηση
Επιλέξτε έλεγχο
Επιλέξτε το εργαλείο από την παρακάτω λίστα και δώστε το domain, τη διεύθυνση ή την IP που ζητά.
Αίτημα
curl -s 'https://email-spam-tester.com/api/v1/tools/spf?domain=example.com'Διαβάστε την κατάσταση και τα ευρήματα
Κάθε εργαλείο απαντά με μια κατάσταση και τα ευρήματά του. Τα πεδία που ακολουθούν εξαρτώνται από το εργαλείο.
Απόκριση
{ "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} }
Τελικά σημεία
GET/api/v1/tools/spf
Η εγγραφή SPF ενός domain: η σύνταξή της, κάθε include και redirect που ακολουθείται και οι αναζητήσεις DNS που κοστίζει ολόκληρο το δέντρο έναντι του ορίου των δέκα. Δώστε ?domain=example.com.
GET/api/v1/tools/dmarc
Η εγγραφή DMARC ενός domain, ή του οργανωτικού του domain όταν δεν διαθέτει εγγραφή: οι ετικέτες, η πολιτική και αν κάθε εξωτερική διεύθυνση αναφορών έχει συμφωνήσει να λαμβάνει αναφορές. Δώστε ?domain=example.com.
GET/api/v1/tools/dkim
Το κλειδί DKIM που έχει δημοσιευτεί για έναν selector: αν υπάρχει και αποκωδικοποιείται, ο τύπος και το μέγεθός του και οι σημαίες ανάκλησης και δοκιμής. Δώστε ?domain=example.com&selector=s1.
GET/api/v1/tools/blocklist
Μια διεύθυνση IPv4, μια διεύθυνση IPv6 ή ένα domain που ελέγχεται στις λίστες αποκλεισμού DNS τις οποίες χρησιμοποιεί η αναφορά, με την απάντηση κάθε λίστας. Δώστε ?target=203.0.113.5.
GET/api/v1/tools/mx
Οι εγγραφές MX ενός domain με τη σειρά που τις δοκιμάζουν οι αποστολείς, μαζί με τις διευθύνσεις IPv4 και IPv6 κάθε host. Αναφέρονται Null MX, domain χωρίς MX, host που είναι διευθύνσεις IP ή CNAME και host που δεν επιλύονται, καθώς και οι εγγραφές MTA-STS και TLS-RPT. Περάστε ?domain=example.com.
GET/api/v1/tools/bimi
Η ρύθμιση BIMI ενός domain σε τέσσερα βήματα: η πολιτική DMARC που απαιτεί το BIMI, η εγγραφή στο default._bimi, το λογότυπο SVG ελεγμένο ως προς το προφίλ Tiny PS και το πιστοποιητικό σήματος με τον τύπο, τα domain και την ημερομηνία λήξης του. Περάστε ?domain=example.com και &selector= για selector διαφορετικό από το default.
GET/api/v1/tools/ptr
Οι εγγραφές PTR μιας διεύθυνσης και αν κάποιο από αυτά τα ονόματα επιλύεται ξανά σε αυτήν. Μια αναζήτηση που απέτυχε δίνει την κατάσταση error· μια εγγραφή που λείπει δίνει την κατάσταση fail. Περάστε ?ip=8.8.8.8.
GET/api/v1/tools/mta-sts
Η εγγραφή MTA-STS ενός τομέα και το αρχείο πολιτικής στο οποίο παραπέμπει: η λειτουργία, οι κεντρικοί υπολογιστές που αναφέρονται και κάθε κεντρικός υπολογιστής MX που παραλείπει η πολιτική. Δώστε ?domain=example.com.
GET/api/v1/tools/tls-rpt
Η εγγραφή TLS-RPT ενός τομέα και οι διευθύνσεις που λαμβάνουν τις αναφορές της. Δώστε ?domain=example.com.
GET/api/v1/tools/dnssec
Αν η ζώνη ενός τομέα είναι υπογεγραμμένη, ανυπόγραφη ή προβληματική, βάσει των εγγραφών DNSKEY και DS. Μια μη έγκυρη υπογραφή διακρίνεται από μια διακοπή λειτουργίας του επιλυτή. Δώστε ?domain=example.com.
GET/api/v1/tools/dane
Οι εγγραφές TLSA των κεντρικών υπολογιστών MX, σε σύγκριση με το πιστοποιητικό που παρουσιάζει ένας κεντρικός υπολογιστής όταν ήταν δυνατή η ανάγνωση αυτού του πιστοποιητικού. Δώστε ?domain=example.com.
GET/api/v1/tools/smtp
Το STARTTLS και το πιστοποιητικό στους πρώτους δύο κεντρικούς υπολογιστές MX: έκδοση TLS, εκδότης, ημερομηνία λήξης και αν η αλυσίδα και το όνομα είναι έγκυρα. Συνδεόμαστε μόνο με κεντρικούς υπολογιστές στον τομέα για τον οποίο ζητήσατε έλεγχο και παραλείπουμε τους παρόχους email, ενώ ένα αποτέλεσμα ανά διεύθυνση επαναχρησιμοποιείται για 6 ώρες. Δεν αποστέλλεται κανένα email. Δώστε ?domain=example.com.
GET/api/v1/tools/ns
Οι διακομιστές ονομάτων ενός τομέα και αν η ζώνη του έχει εγγραφή SOA. Ένας διακομιστής ονομάτων αποτελεί προειδοποίηση. Δώστε ?domain=example.com.
GET/api/v1/tools/registration
Πότε λήγει η καταχώριση ενός τομέα, βάσει του RDAP. Αν απομένουν λιγότερες από 30 ημέρες, αποτελεί προειδοποίηση. Για μια ζώνη χωρίς υπηρεσία RDAP, η απάντηση είναι skipped. Δώστε ?domain=example.com.
POST/api/v1/tools/header
Οι κεφαλίδες ενός ληφθέντος μηνύματος, σταλμένες ως JSON {"headers": "..."} ή ως text/plain: η διαδρομή ανά hop με τις καθυστερήσεις, το TLS και την απόκλιση ρολογιού, το Authentication-Results του ίδιου του παραλήπτη, η ευθυγράμμιση των domain στα From, DKIM d= και Return-Path, και οι κεφαλίδες DKIM, ARC, κατάργησης εγγραφής και φίλτρου ανεπιθύμητης αλληλογραφίας. Ό,τι ακολουθεί την πρώτη κενή γραμμή απορρίπτεται χωρίς να διαβαστεί. Οι κεφαλίδες υποβάλλονται σε επεξεργασία στη μνήμη και δεν αποθηκεύονται, δεν εισάγονται σε cache και δεν καταγράφονται.
Ελέγχετε το domain κάθε βράδυ.
Δοκιμάστε το email πριν αποσταλεί.
Κοινά για κάθε προϊόν
Πρόσβαση, κλειδιά, μορφή αναφοράς, καταστάσεις, σφάλματα, καθώς και OpenAPI και llms.txt για μηχανές.
Έλεγχος ταυτότητας
Δεν υπάρχει. Δεν χρειάζεται να ζητήσετε κλειδί, να ορίσετε κεφαλίδα ή να δημιουργήσετε λογαριασμό. Το slug που λαμβάνετε είναι η δυνατότητα πρόσβασης: όποιος το κατέχει μπορεί να διαβάσει αυτή την αναφορά και κανείς άλλος δεν μπορεί να το μαντέψει.
Προσωπικά κλειδιά API
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.
Ανάγνωση της αναφοράς
Τα πεδία που περιέχουν την απάντηση, με τη σειρά που πιθανότατα τα χρειάζεστε.
| score_ours | 0 έως 100. Το μοντέλο μας. Ο έλεγχος ταυτότητας και η υποδομή έχουν τη μεγαλύτερη βαρύτητα, επειδή καθορίζουν την παράδοση προτού ένα φίλτρο διαβάσει έστω και μία λέξη του κειμένου. |
| score_compat | 0 έως 10. Αναπαράγει τη βαθμολογία τύπου SpamAssassin που οι χρήστες ήδη συγκρίνουν, ώστε η αναφορά να είναι συγκρίσιμη με ό,τι είδε κάποιος αλλού. |
| subscores | Η ίδια κλίμακα από 0 έως 100 ανά ενότητα: auth, infra_spam, content, compliance. |
| checks[] | Και οι 42 έλεγχοι, ο καθένας με κατάσταση, εύρημα μίας γραμμής, τα αποδεικτικά στοιχεία στα οποία βασίστηκε η απόφαση και το κόστος του για τις δύο βαθμολογίες. |
| checks[].citations | Από πού προέρχεται το εύρημα: η ενότητα του RFC, παρατιθέμενη κατά λέξη, και η σελίδα όπου η Google δηλώνει τη δική της απαίτηση. Έχουν επιμεληθεί χειροκίνητα αντί να έχουν δημιουργηθεί αυτόματα, ώστε να είναι αξιόπιστα. |
| fixes[] | Τι πρέπει να αλλάξει, με τη σειρά, μαζί με τους βαθμούς που αξίζει κάθε αλλαγή. Τα οφέλη υπολογίζονται με νέα βαθμολόγηση της αναφοράς, δεν αποτελούν εκτίμηση. |
| complete | False όταν ένας έλεγχος δεν μπόρεσε να εκτελεστεί. Ένα στοιχείο που δεν ελέγχθηκε δεν θεωρείται ποτέ επιτυχές, οπότε θεωρήστε τη βαθμολογία αισιόδοξη μέχρι να γίνει true. |
| report_url | Η σελίδα σε μορφή αναγνώσιμη από άνθρωπο. Δώστε αυτήν σε κάποιον αντί για έναν τοίχο από JSON. |
Καταστάσεις
Ένας έλεγχος βρίσκεται σε μία από πέντε καταστάσεις, και η διαφορά μεταξύ δύο από αυτές έχει μεγαλύτερη σημασία από όσο φαίνεται.
| pass | Ο έλεγχος εκτελέστηκε και δεν βρήκε κανένα πρόβλημα. |
| warn | Αξίζει να διορθωθεί. Κοστίζει βαθμούς. |
| fail | Θα σας κοστίσει στην παράδοση. Κοστίζει περισσότερους βαθμούς. |
| παράλειψη | Δεν εφαρμόστηκε. Δεν υπάρχουν συνημμένα για σάρωση, ούτε τμήμα HTML για αξιολόγηση. Δεν αποτελεί επιτυχία. |
| σφάλμα | Δεν μπορέσαμε να το εξακριβώσουμε. Εξαιρείται από τη βαθμολογία και επισημαίνεται, αντί να υπολογίζεται ως επιτυχία. |
Το analysis_status περνά από received, analyzing, checks_ready, failed. Το ai_status περνά από pending, running, ready, fallback, error. Η ντετερμινιστική αναφορά είναι οριστική στο checks_ready· το ai_status προσθέτει μόνο το πλάνο.
Τι μπορεί να επιστραφεί
| 202 | Η διεύθυνση είναι δεσμευμένη και δεν έχει φτάσει κανένα μήνυμα. Το σώμα περιέχει τη διεύθυνση, τη λήξη και τη γλώσσα, ώστε ένας καλών που δεν δημιούργησε τη δέσμευση να μπορεί παρ' όλα αυτά να την εμφανίσει. |
| 404 | Δεν υπάρχει τέτοιο slug. Είτε δεν υπήρξε ποτέ είτε η δέσμευση ξεχάστηκε. |
| 410 | Η διεύθυνση έληξε πριν φτάσει κάποιο μήνυμα. |
| 409 | Προσπαθήσατε να αλλάξετε τη γλώσσα αφού το μήνυμα είχε ήδη φτάσει. |
| 429 | Το όριο δωρεάν δοκιμών για τη διεύθυνσή σας. Αυτή τη στιγμή δεν υπάρχει όριο ανά άτομο σε αυτή την υπηρεσία· αν οριστεί ποτέ, το σώμα αναφέρει πότε μηδενίζεται. |
Τέσσερα πράγματα που αξίζει να γνωρίζετε
Ένα μήνυμα ανά διεύθυνση
Το δεύτερο απορρίπτεται. Η προηγούμενη αναφορά σας παραμένει ανέπαφη, και αυτό είναι το ζητούμενο.
Μία ώρα για να τη χρησιμοποιήσετε
Η διεύθυνση λήγει· η αναφορά όχι. Οι σύνδεσμοι αναφορών είναι μόνιμοι, οπότε ένας σύνδεσμος που επικολλάται σε ένα αίτημα υποστήριξης συνεχίζει να λειτουργεί.
Στείλτε από την πλατφόρμα
Η δοκιμή μιας καμπάνιας από προσωπικό λογαριασμό μετρά αυτόν τον λογαριασμό. Σχεδόν όλα στην ενότητα ελέγχου ταυτότητας αφορούν την υποδομή αποστολής, όχι το κείμενο.
Επαναλάβετε τη δοκιμή μετά τη διόρθωση
Τα αναμενόμενα οφέλη υπολογίζονται για μία διόρθωση κάθε φορά και δεν συνδυάζονται. Η δεύτερη αναφορά δίνει τον πραγματικό αριθμό.
Για συστήματα
- /api/openapi.json Η περιγραφή OpenAPI, η οποία δημιουργείται από τον ίδιο κώδικα που εξυπηρετεί το API.
- /llms.txt, /llms-full.txt Ένας σύντομος χάρτης αυτού του ιστότοπου για γλωσσικά μοντέλα, σύμφωνα με τη σύμβαση llms.txt, και μια εκτενέστερη έκδοση με ολόκληρο τον κύκλο και τα πεδία της αναφοράς σε ένα αρχείο.
- /mcp Ένας διακομιστής MCP με την ίδια δυνατότητα και αναμονή με αποκλεισμό, η οποία είναι καλύτερη από την περιοδική υποβολή ερωτημάτων μέσα από ένα μοντέλο.
- For agents Η σελίδα για πράκτορες: πότε να χρησιμοποιήσετε αυτό το εργαλείο, πώς να διακρίνετε έναν έλεγχο που παραλείφθηκε από έναν επιτυχημένο και ποια ευρήματα είναι εγγραφές DNS που πρέπει να αλλάξει κάποιος αντί για κείμενο που μπορεί να επεξεργαστεί ένας πράκτορας.
GET/api/health
Έλεγχος λειτουργίας. Χωρίς έλεγχο ταυτότητας, χωρίς παρενέργειες.
Δοκιμάστε πρώτα ένα χειροκίνητα
Χρειάζεται περίπου ένα λεπτό και σας δείχνει ακριβώς τι περιγράφει το JSON.
Λήψη διεύθυνσης δοκιμήςSandbox.
Κάθε endpoint, με ένα κουμπί που το εκτελεί στην ενεργή υπηρεσία. Τίποτα εδώ δεν χρειάζεται κλειδί, επομένως ένα αίτημα που στέλνετε από αυτή τη σελίδα είναι πραγματικό: δεσμεύει μια πραγματική διεύθυνση και προσμετράται.
Δοκιμάστε το στο sandbox