ईमेल, इनबॉक्स और डोमेन के लिए
स्पैम जाँच API
हमें एक वास्तविक संदेश भेजें, या केवल एक डोमेन दें। हर उत्तर 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"}]
}वह चुनें जिसकी आपको आवश्यकता है
इस पेज पर
ईमेल परीक्षण
हम एक वास्तविक संदेश को शुरू से अंत तक पढ़ते हैं: सामग्री, हस्ताक्षर, हेडर और उसे भेजने वाला सर्वर। आपको एक स्कोर, सुधारों की सूची और उनके पीछे की प्रत्येक जाँच मिलती है।
त्वरित शुरुआत
तीन कॉल। कोई कुंजी नहीं, कोई खाता नहीं, कोई साइनअप नहीं। दो अनुरोध और एक ईमेल। तीसरी कॉल केवल इसलिए है क्योंकि विश्लेषण में कुछ सेकंड लगते हैं।
एक पता आरक्षित करें
इनबॉक्स एंडपॉइंट पर POST करें। आपको ऐसा पता मिलता है जो ठीक एक संदेश स्वीकार करता है और एक घंटे में समाप्त हो जाता है, साथ ही वह स्लग भी मिलता है जिस पर बाकी सब कुछ आधारित है।
अनुरोध
# 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स्थिति की पोलिंग करें, फिर रिपोर्ट पढ़ें
स्थिति एंडपॉइंट कुछ सौ बाइट का है और आपको बताता है कि पूरी रिपोर्ट अभी फ़ेच करने योग्य है या नहीं। रिपोर्ट स्वयं कई हज़ार पंक्तियों की होती है।
अनुरोध
# 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 रिपोर्ट निःशुल्क हैं, इनके लिए किसी कुंजी या खाते की आवश्यकता नहीं है। यदि आप किसी स्क्रिप्ट के बजाय एजेंट को कनेक्ट कर रहे हैं, तो पोलिंग की तुलना में MCP सर्वर अधिक उपयुक्त है।
एंडपॉइंट
मूल पता https://email-spam-tester.com। हर चीज़ JSON में उत्तर देती है।
POST/api/v1/inbox
एक बार उपयोग होने वाला पता आरक्षित करता है। दोनों पैरामीटर वैकल्पिक हैं।
| lang | ISO कोड के रूप में वह भाषा, जिसमें सुधार योजना और प्रत्येक जाँच के निष्कर्ष लिखे जाएँगे। यह अभी तय किया जाता है क्योंकि संदेश कुछ मिनट बाद SMTP के माध्यम से आता है और इसमें इसका कोई संकेत नहीं होता कि कौन इसकी प्रतीक्षा कर रहा है। किसी अज्ञात कोड के लिए English का उपयोग किया जाता है। |
| 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
संदेश ठीक उसी तरह जैसे वह डिलीवर हुआ था: वायर क्रम में प्रत्येक हेडर, दोनों बॉडी, अटैचमेंट सूची और कच्चा स्रोत। इसे अलग से प्राप्त किया जाता है क्योंकि रिपोर्ट को पोल किया जाता है और इसका आकार एक मेगाबाइट तक हो सकता है।
PUT/api/v1/tests/{slug}/locale
ऐसे reservation की भाषा बदलता है जिसका अभी तक उपयोग नहीं हुआ है। ऐसे agent के लिए, जो पता पहले ही मांग लेने के बाद यह जानता है कि उसका user कौन-सी भाषा पढ़ता है। संदेश पहुंच जाने के बाद अनुरोध अस्वीकार कर दिया जाता है, क्योंकि तब तक analysis चल रहा होता है।
इनबॉक्स प्लेसमेंटबीटा
परीक्षण इनबॉक्स की सूची पर एक संदेश भेजें और देखें कि वह Gmail, Outlook, Yahoo और अन्य प्रदाताओं पर कहाँ पहुँचा: इनबॉक्स, प्रमोशन्स या स्पैम।
त्वरित शुरुआत
परीक्षण बनाएँ
प्लेसमेंट एंडपॉइंट पर POST करें। आपको एक मार्कर और परीक्षण इनबॉक्स वापस मिलते हैं।
अनुरोध
# 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 बिना कुछ भेजे किसी डोमेन के mail setup की जाँच करता है, result को रखता है, और बताता है कि आपके पिछले run के बाद क्या बदला। किसी key की आवश्यकता नहीं है। cron में, नीचे दी गई line non-zero के साथ exit होती है जब डोमेन broken हो या उसका setup किसी महत्वपूर्ण तरीके से बदला हो।
त्वरित शुरुआत
एक GET करें
डोमेन दें। ip आपके भेजने वाले पते जोड़ता है, और selector पढ़े जाने वाले DKIM selectors के नाम देता है।
अनुरोध
curl -s 'https://email-spam-tester.com/api/v1/infra/check?domain=example.com&selector=mail&diff=true'निर्णय पढ़ें
स्क्रिप्ट के लिए उत्तर ok है, और 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 उत्तर को exit code में बदलता है।
अनुरोध
# 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, एक ईमेल पता। |
| ip | आपका भेजने वाला पता। अधिक पतों के लिए इसे दोहराएँ, अधिकतम 6 तक। |
| selector | एक DKIM सिलेक्टर। अधिक सिलेक्टर के लिए इसे दोहराएँ, अधिकतम 10 तक। आपके द्वारा पास किया गया हर सिलेक्टर मौजूद होना चाहिए, अन्यथा dkim सेक्शन विफल हो जाता है। |
| helo | वह नाम जो आपका सर्वर HELO में देता है, जिसकी तुलना उसके PTR से की जाती है। |
| account | अनुरोध किसके लिए है। ऐसी कुंजी के साथ आवश्यक है जो कई लोगों को सेवा देती है। |
| checks | चलाए जाने वाले सेक्शन, कॉमा से अलग किए हुए। डिफ़ॉल्ट रूप से सभी। |
| diff | true इस रन की तुलना आपके डोमेन के पिछले रन से करता है। |
| since | 7d, 12h या ISO 8601 तारीख। 12 घंटों के भीतर उस समय के सबसे निकट वाले आपके रन से तुलना करता है, अन्यथा उससे पहले वाले अंतिम रन से। diff चालू करता है। |
| baseline | तुलना करने के लिए आपके किसी एक रन की id। diff चालू करता है। |
| fresh | true 60-सेकंड के कैश को छोड़ देता है। |
उत्तर पढ़ना
पूरी हुई जाँच 200 लौटाती है, और verdict body में होता है। status आवश्यक sections में सबसे खराब है: spf, dkim, dmarc, ptr, blocklist_ip, blocklist_domain, mx और smtp। किसी आवश्यक section में unknown को warn माना जाता है। जब status pass या warn हो, तब ok true होता है। उत्तर देने वाले आवश्यक sections पर score 0 से 100 तक होता है, और जब errors और unknowns के कारण लागू भार के आधे से कम का उत्तर मिलता है, तब यह null होता है। mta_sts, tls_rpt, bimi, dnssec, dane, ns और registration की रिपोर्ट और तुलना की जाती है, लेकिन वे ok या score को प्रभावित नहीं करते।
कोई section pass, warn, fail, error (हम जाँच नहीं कर सके), unknown (निष्कर्ष के लिए बहुत कम जानकारी) या skipped (लागू नहीं होता) हो सकता है। skipped का परिणाम पर कोई प्रभाव नहीं पड़ता, और कारण not_checked में होता है। dkim_signature और alignment हमेशा मौजूद होते हैं, क्योंकि उनके लिए वास्तविक message चाहिए।
ip और selector क्या बदलते हैं
PTR और blocklists addresses से संबंधित होते हैं, इसलिए किसी run को कुछ addresses चाहिए। यह आपके दिए हुए ip values का उपयोग करता है। कोई value न होने पर, यह आपके MX hosts और मूल SPF record में मौजूद single-address ip4: और ip6: terms से अधिकतम चार addresses लेता है। किसी ज्ञात mail provider के addresses को managed के रूप में सूचीबद्ध करके उनकी जाँच नहीं की जाती, और कुछ भी शेष न रहने पर ptr और blocklist_ip का उत्तर skipped होता है। किसी selector को DNS से पढ़ा नहीं जा सकता, इसलिए run आपके selectors, आपके पिछले runs में मिले selectors और सामान्य names की सूची को आज़माता है। कुछ न मिलना कुछ भी सिद्ध नहीं करता, और dkim का उत्तर unknown होता है। यदि आप अपने server से भेजते हैं, तो दोनों दें।
क्या बदला
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 यही बताता है।
baseline हमेशा आपका अपना run होता है, इसलिए आपके दो runs के बीच किसी और के द्वारा domain की जाँच करने से कुछ नहीं छिपता। इस बार जो कुछ भी हम नहीं पढ़ सके, वह अपने अंतिम ज्ञात value के साथ diff.not_compared में जाता है, जिसका अर्थ है कि outage के दौरान किया गया change lookup के फिर से काम करने पर दिखाई देता है। अलग ip या selector वाला run उसी series में रहता है, और जिन चीज़ों के बारे में उसने नहीं पूछा, उनकी भी तुलना नहीं की जाती।
निर्धारित जाँच में key क्यों इस्तेमाल करें
key के बिना आपका history आपके IP address के keyed hash से संबद्ध होता है, इसलिए address बदलने पर यह समाप्त हो जाता है, और एक address के पीछे मौजूद लोग इसे साझा करते हैं: किसी सहकर्मी का run आपके baseline को बदल देता है। Authorization: Bearer में personal API key के साथ history key का अनुसरण करता है। key वाले runs 365 दिनों तक रखे जाते हैं और केवल उसी key से खुलते हैं। key के बिना runs 30 दिनों तक रखे जाते हैं और उस run की id रखने वाला कोई भी व्यक्ति उन्हें खोल सकता है।
प्रति IP एक मिनट में 6 और एक दिन में 50 requests, या प्रति key 30 और 500। इससे अधिक होने पर उत्तर Retry-After के साथ 429 होता है। 60 सेकंड के भीतर समान request cache से आता है, cached: true के रूप में चिह्नित होता है, कोई run नहीं लिखता और गिना नहीं जाता। stored runs पढ़ने के लिए प्रति client एक मिनट में 120 requests की अनुमति है। Retry-After के साथ 503 का अर्थ है कि बहुत अधिक checks चल रहे हैं, या stored runs पढ़ते समय storage उपलब्ध नहीं है। 401 का अर्थ गलत key है। 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
किसी डोमेन के लिए आपके रन, नवीनतम पहले: id, समय, स्थिति, स्कोर और परिवर्तनों की संख्या। limit (1 से 100, डिफ़ॉल्ट रूप से 30) और before, जो एक रन id है, लेता है।
GET/api/v1/infra/diff
दो संग्रहीत रन के बीच वही तुलना, ?from=<id>&to=<id>। आपको दोनों तक पहुँच की आवश्यकता है।
GET/api/v1/infra/checks
प्रत्येक अनुभाग उसके भार, स्कोर संस्करण और सीमाओं के साथ।
एकल जाँचें
हर कॉल एक प्रश्न का उत्तर देती है और कोई इतिहास नहीं रखती। हेडर टूल को छोड़कर, हर टूल इन्फ्रास्ट्रक्चर जाँच का एक भाग अपने आप चलाता है; हेडर टूल आपके द्वारा पहले ही प्राप्त किए गए संदेश को पढ़ता है।
त्वरित शुरुआत
जाँच चुनें
नीचे दी गई सूची से टूल चुनें और उसके द्वारा माँगा गया डोमेन, पता या 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 रिकॉर्ड: इसका सिंटैक्स, अनुसरण किया गया प्रत्येक include और redirect, और दस की सीमा के मुकाबले पूरे ट्री में होने वाले DNS लुकअप की संख्या। ?domain=example.com पास करें।
GET/api/v1/tools/dmarc
किसी डोमेन का DMARC रिकॉर्ड, या रिकॉर्ड न होने पर उसके संगठनात्मक डोमेन का रिकॉर्ड: टैग, नीति और क्या प्रत्येक बाहरी रिपोर्ट पते ने रिपोर्ट स्वीकार करने की सहमति दी है। ?domain=example.com पास करें।
GET/api/v1/tools/dkim
किसी selector के लिए प्रकाशित DKIM कुंजी: क्या यह मौजूद है और डीकोड होती है, इसका प्रकार और आकार, और revoked तथा testing फ़्लैग। ?domain=example.com&selector=s1 पास करें।
GET/api/v1/tools/blocklist
रिपोर्ट द्वारा उपयोग की जाने वाली DNS ब्लॉकलिस्ट के विरुद्ध जाँचा गया कोई IPv4 पता, IPv6 पता या डोमेन, प्रत्येक सूची के उत्तर सहित। ?target=203.0.113.5 पास करें।
GET/api/v1/tools/mx
किसी डोमेन के MX रिकॉर्ड उस क्रम में जिसमें प्रेषक उन्हें आज़माते हैं, साथ में प्रत्येक होस्ट के IPv4 और IPv6 पते। Null MX, बिना MX वाला डोमेन, ऐसे होस्ट जो IP पते या CNAME हैं और ऐसे होस्ट जो रिज़ॉल्व नहीं होते, रिपोर्ट किए जाते हैं, और MTA-STS तथा TLS-RPT रिकॉर्ड भी। ?domain=example.com पास करें।
GET/api/v1/tools/bimi
किसी डोमेन का BIMI सेटअप चार चरणों में: BIMI के लिए आवश्यक DMARC नीति, default._bimi पर रिकॉर्ड, Tiny PS प्रोफ़ाइल के विरुद्ध जाँचा गया SVG लोगो, और उसके प्रकार, डोमेन तथा समाप्ति के साथ मार्क प्रमाणपत्र। ?domain=example.com पास करें, और default के अलावा किसी सेलेक्टर के लिए &selector= पास करें।
GET/api/v1/tools/ptr
किसी पते के PTR रिकॉर्ड और क्या उनमें से कोई नाम वापस उसी पते पर रिज़ॉल्व होता है। विफल लुकअप की स्थिति error होती है; रिकॉर्ड न मिलने की स्थिति fail होती है। ?ip=8.8.8.8 पास करें।
GET/api/v1/tools/mta-sts
किसी डोमेन का MTA-STS रिकॉर्ड और वह policy फ़ाइल जिसकी ओर यह संकेत करता है: mode, सूचीबद्ध hosts, और ऐसा कोई MX host जिसे policy शामिल नहीं करती। ?domain=example.com पास करें।
GET/api/v1/tools/tls-rpt
किसी डोमेन का TLS-RPT रिकॉर्ड और वे पते जो इसकी reports प्राप्त करते हैं। ?domain=example.com पास करें।
GET/api/v1/tools/dnssec
किसी डोमेन का zone signed, unsigned या broken है या नहीं, उसके DNSKEY और DS रिकॉर्ड के आधार पर। खराब signature को resolver outage से अलग बताया जाता है। ?domain=example.com पास करें।
GET/api/v1/tools/dane
MX hosts के TLSA रिकॉर्ड, उनकी तुलना उस certificate से की जाती है जिसे कोई host प्रस्तुत करता है, जब उस certificate को पढ़ा जा सका हो। ?domain=example.com पास करें।
GET/api/v1/tools/smtp
पहले दो MX hosts पर STARTTLS और certificate: TLS version, issuer, expiry date, और क्या chain तथा name मान्य हैं। हम केवल आपके द्वारा पूछे गए डोमेन के अंतर्गत आने वाले hosts से connect करते हैं और mail providers को छोड़ देते हैं, और प्रत्येक पते के लिए एक result 6 घंटे तक साझा किया जाता है। कोई mail नहीं भेजा जाता। ?domain=example.com पास करें।
GET/api/v1/tools/ns
किसी डोमेन के name servers और क्या उसके zone में SOA रिकॉर्ड है। केवल एक name server होना warning है। ?domain=example.com पास करें।
GET/api/v1/tools/registration
RDAP के अनुसार किसी डोमेन का registration कब समाप्त होता है। 30 दिन से कम समय बचना warning है। जिस zone के लिए कोई RDAP service नहीं है, उसका उत्तर skipped होता है। ?domain=example.com पास करें।
POST/api/v1/tools/header
प्राप्त संदेश के हेडर, JSON {"headers": "..."} के रूप में या text/plain के रूप में भेजे गए: विलंब, TLS और क्लॉक स्क्यू के साथ हर हॉप का मार्ग, प्राप्तकर्ता के अपने Authentication-Results, From, DKIM d= और Return-Path डोमेन का अलाइनमेंट, और DKIM, ARC, अनसब्सक्राइब तथा स्पैम फ़िल्टर हेडर। पहली खाली पंक्ति के बाद की हर चीज़ बिना पढ़े हटा दी जाती है। हेडर मेमोरी में प्रोसेस किए जाते हैं और उन्हें स्टोर, कैश या लॉग नहीं किया जाता।
हर रात डोमेन जाँचें।
ईमेल भेजे जाने से पहले उसे टेस्ट करें।
हर प्रोडक्ट में साझा
एक्सेस, कुंजियाँ, रिपोर्ट का प्रारूप, स्थितियाँ, त्रुटियाँ, साथ ही मशीनों के लिए OpenAPI और llms.txt।
प्रमाणीकरण
कोई नहीं है। अनुरोध करने के लिए कोई कुंजी नहीं, सेट करने के लिए कोई हेडर नहीं, बनाने के लिए कोई खाता नहीं। आपको वापस मिलने वाला स्लग ही क्षमता है: जिसके पास यह है, वह उस रिपोर्ट को पढ़ सकता है, और कोई अन्य इसका अनुमान नहीं लगा सकता।
व्यक्तिगत 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.
रिपोर्ट पढ़ना
वे fields जिनमें उत्तर होता है, उस क्रम में जिसमें आप शायद उन्हें देखना चाहेंगे।
| score_ours | 0 से 100। हमारा model। Authentication और infrastructure का भार सबसे अधिक होता है, क्योंकि किसी filter द्वारा copy का एक भी शब्द पढ़े जाने से पहले वे delivery तय करते हैं। |
| score_compat | 0 से 10। उस SpamAssassin-शैली की संख्या को दोहराता है जिसकी लोग पहले से तुलना करते हैं, ताकि रिपोर्ट की तुलना उस चीज़ से की जा सके जिसे किसी ने कहीं और देखा था। |
| subscores | प्रति section वही 0 से 100 का scale: auth, infra_spam, content, compliance। |
| checks[] | सभी 42, प्रत्येक में एक status, एक-पंक्ति का finding, वह evidence जिस पर निर्णय लिया गया और दोनों scores पर उसकी लागत। |
| checks[].citations | निष्कर्ष कहाँ से आया है: RFC का अनुभाग, शब्दशः उद्धृत, और वह पृष्ठ जहाँ Google अपनी आवश्यकता बताता है। इन्हें जनरेट करने के बजाय हाथ से संकलित किया गया है, इसलिए इन पर भरोसा किया जा सकता है। |
| सुधार[] | क्या बदलना है, क्रम में, और प्रत्येक बदलाव के लिए मिलने वाले अंक। लाभ की गणना रिपोर्ट को फिर से स्कोर करके की जाती है, इसका अनुमान नहीं लगाया जाता। |
| पूर्ण | जब कोई जाँच नहीं चल सकी, तो असत्य। बिना जाँचा गया आइटम कभी भी पास नहीं होता, इसलिए इसके सत्य होने तक स्कोर को आशावादी मानें। |
| रिपोर्ट_यूआरएल | मनुष्य के पढ़ने योग्य पृष्ठ। JSON का ढेर देने के बजाय किसी व्यक्ति को यह दें। |
स्थितियाँ
किसी जाँच की पाँच स्थितियों में से एक होती है, और उनमें से दो के बीच का अंतर जितना दिखता है उससे अधिक महत्वपूर्ण है।
| पास | जाँच चली और उसे कुछ भी गलत नहीं मिला। |
| चेतावनी | इसे ठीक करना उचित है। इससे अंक कटते हैं। |
| विफल | आपकी डिलीवरी पर असर पड़ेगा। अधिक अंक कटेंगे। |
| छोड़ा गया | लागू नहीं हुआ। स्कैन करने के लिए कोई अटैचमेंट नहीं, आकलन करने के लिए कोई HTML भाग नहीं। इसे पास नहीं माना गया। |
| त्रुटि | हम इसका पता नहीं लगा सके। इसे पास मानकर गिनने के बजाय स्कोर से बाहर रखा गया और फ़्लैग किया गया। |
analysis_status के मान received, analyzing, checks_ready, failed होते हैं। ai_status के मान pending, running, ready, fallback, error होते हैं। नियतात्मक रिपोर्ट checks_ready पर अंतिम होती है; ai_status केवल योजना जोड़ता है।
क्या वापस आ सकता है
| 202 | पता आरक्षित है और कोई संदेश नहीं आया है। बॉडी में पता, समाप्ति समय और भाषा होती है, इसलिए जिस कॉलर ने आरक्षण नहीं बनाया था, वह भी इसे दिखा सकता है। |
| 404 | ऐसा कोई स्लग नहीं है। या तो वह कभी अस्तित्व में नहीं था, या आरक्षण भुला दिया गया था। |
| 410 | संदेश आने से पहले ही पते की अवधि समाप्त हो गई। |
| 409 | आपने संदेश के पहले ही आ जाने के बाद भाषा बदलने की कोशिश की। |
| 429 | आपके पते के लिए निःशुल्क परीक्षण की सीमा। इस सेवा पर अभी प्रति व्यक्ति कोई सीमा नहीं है; यदि कभी कोई सीमा निर्धारित की जाती है, तो बॉडी बताती है कि वह कब रीसेट होती है। |
जानने योग्य चार बातें
प्रति पते एक संदेश
दूसरा संदेश अस्वीकार कर दिया जाता है। आपकी पिछली रिपोर्ट जस की तस रहती है, और यही इसका उद्देश्य है।
इस्तेमाल के लिए एक घंटा
पता समाप्त हो जाता है; रिपोर्ट नहीं। रिपोर्ट के लिंक स्थायी होते हैं, इसलिए टिकट में चिपकाया गया लिंक काम करता रहता है।
प्लेटफ़ॉर्म से भेजें
व्यक्तिगत खाते से किसी अभियान का परीक्षण उस खाते को मापता है। प्रमाणीकरण अनुभाग में लगभग सब कुछ भेजने वाले इन्फ़्रास्ट्रक्चर के बारे में है, टेक्स्ट के बारे में नहीं।
ठीक करने के बाद फिर परीक्षण करें
अपेक्षित सुधारों की गणना एक बार में एक सुधार के लिए की जाती है और वे एक साथ नहीं जुड़ते। दूसरी रिपोर्ट सही संख्या बताती है।
मशीनों के लिए
- /api/openapi.json OpenAPI विवरण, उसी कोड से जनरेट किया गया है जो API उपलब्ध कराता है।
- /llms.txt, /llms-full.txt भाषा मॉडल के लिए इस साइट का एक संक्षिप्त मानचित्र, llms.txt परंपरा में, और एक लंबा संस्करण जिसमें पूरा लूप और रिपोर्ट फ़ील्ड एक ही फ़ाइल में हैं।
- /mcp समान क्षमता और ब्लॉकिंग प्रतीक्षा वाला एक MCP सर्वर, जो किसी मॉडल के भीतर से पोलिंग करने से बेहतर है।
- For agents एजेंट पेज: इसका उपयोग कब करना है, छोड़ी गई जाँच और सफल जाँच के बीच अंतर कैसे समझना है, और कौन से निष्कर्ष ऐसे DNS रिकॉर्ड हैं जिन्हें किसी व्यक्ति को बदलना होगा, न कि ऐसा टेक्स्ट जिसे कोई एजेंट संपादित कर सकता है।
GET/api/health
सक्रियता। कोई authentication नहीं, कोई side effect नहीं।
पहले एक बार मैन्युअल रूप से आज़माएँ
इसमें लगभग एक मिनट लगता है और यह आपको ठीक वही दिखाता है जिसका वर्णन JSON करता है।
एक परीक्षण पता प्राप्त करेंसैंडबॉक्स।
हर एंडपॉइंट के साथ एक बटन है, जो उसे लाइव सेवा पर चलाता है। यहाँ किसी कुंजी की आवश्यकता नहीं है, इसलिए इस पेज से भेजा गया अनुरोध वास्तविक होता है: यह एक वास्तविक पता आरक्षित करता है और इसकी गणना होती है।
सैंडबॉक्स में आज़माएँ