Спробувати в пісочниці → Кожна кінцева точка має кнопку, яка запускає її в реальному сервісі. Тут ключ не потрібен, тому запит, який ви надсилаєте з цієї сторінки, є справжнім: він резервує справжню адресу та враховується.
Цикл
Два запити й один лист. Третій виклик потрібен лише тому, що аналіз триває кілька секунд.
Зарезервуйте адресу
Надішліть POST-запит до кінцевої точки inbox. У відповідь ви отримаєте адресу, яка приймає рівно один лист і втрачає чинність через годину, а також слаг, за яким визначається все інше.
Надішліть на неї справжній лист
Через SMTP, із платформи, яка надсилатиме кампанію. Половина перевірок зчитує заголовки, які додає ваша платформа надсилання, тому лист, складений вручну, вимірює не те.
Опитуйте статус, потім прочитайте звіт
Кінцева точка статусу повертає кілька сотень байтів і повідомляє, чи вже варто отримувати повний звіт. Сам звіт містить кілька тисяч рядків.
# 1. reserve a single-use address curl -sX POST 'https://email-spam-tester.com/api/v1/inbox?lang=en' { "address": "test-<slug>@t.email-spam-tester.com", "slug": "<slug>", "expires_at": "2026-01-01T12:00:00Z" }
# 2. send your message to that address, then poll curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>/status' { "slug": "<slug>", "analysis_status": "checks_ready", "ai_status": "running", "checks_done": 39, "checks_total": 39 }
# 3. read the report once analysis_status is checks_ready curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>' { "report_url": "https://email-spam-tester.com/t/<slug>", "score_ours": 86.4, "score_compat": 9.2, "subscores": {"auth": 100.0, "infra_spam": 78.1, "content": 92.0, "compliance": 75.0}, "complete": true, "checks": [ { "id": "auth.dmarc", "status": "warn", "title": "DMARC result", "summary": "DMARC passes, but the policy is p=none.", "weight_ours": -4.0, "evidence": {"policy": "none", "aligned": "dkim"}, "citations": {"standards": [{"title": "RFC 9989 §4.7", "quote": "..."}]} } ], "fixes": [ {"id": "dmarc-enforce", "gain_ours": 4.0, "gain_compat": 0.0, "fix": {"title": "Move DMARC to quarantine", "severity": "medium"}} ] }
Автентифікація
Її немає. Не потрібно запитувати ключ, задавати заголовок чи створювати обліковий запис. Отриманий слаг є засобом доступу: кожен, хто має його, може прочитати цей звіт, а ніхто інший не може його вгадати.
Кінцеві точки
Базова адреса 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
Повідомлення саме в тому вигляді, у якому його було доставлено: усі заголовки в порядку передавання, обидві частини тіла, список вкладень і необроблений вихідний код. Отримується окремо, оскільки звіт опитується, а розмір цих даних може сягати мегабайта.
PUT/api/v1/tests/{slug}/locale
Змінює мову резервування, яке ще не було використано. Для агента, який дізнається, якою мовою читає його користувач, після того як уже запросив адресу. Запит відхиляється після надходження повідомлення, оскільки на той момент аналіз уже виконується.
GET/api/health
Перевірка працездатності. Без автентифікації, без побічних ефектів.
Читання звіту
Поля, що містять відповідь, у порядку, у якому вони вам, імовірно, потрібні.
| score_ours | Від 0 до 100. Наша модель. Автентифікація та інфраструктура мають найбільшу вагу, оскільки вони визначають доставку ще до того, як фільтр прочитає текст повідомлення. |
| score_compat | Від 0 до 10. Відтворює число у стилі SpamAssassin, з яким користувачі вже звикли порівнювати, тому звіт можна зіставити з тим, що хтось бачив деінде. |
| subscores | Та сама шкала від 0 до 100 для кожного розділу: auth, infra_spam, content, compliance. |
| checks[] | Усі 41, кожна зі статусом, коротким висновком в один рядок, доказами, на основі яких її визначено, і тим, як вона вплинула на дві оцінки. |
| 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 | Такого слага немає. Він або ніколи не існував, або резервування було забуто. |
| 410 | Строк дії адреси минув до надходження повідомлення. |
| 409 | Ви спробували змінити мову після того, як повідомлення вже надійшло. |
| 429 | Досягнуто ліміту безкоштовних тестів для вашої адреси. Зараз у цьому сервісі немає ліміту на особу; якщо його колись установлять, у тілі буде вказано, коли його буде скинуто. |
Чотири важливі речі
Одне повідомлення на адресу
Друге повідомлення відхиляється. Ваш попередній звіт залишається без змін, у цьому й суть.
Година на використання
Термін дії адреси спливає; звіту ні. Посилання на звіти постійні, тому посилання, вставлене в заявку, продовжує працювати.
Надсилайте з платформи
Тестування кампанії з особистого облікового запису оцінює цей обліковий запис. Майже все в розділі автентифікації стосується інфраструктури надсилання, а не тексту.
Повторіть тест після виправлення
Очікувані покращення обчислюються для кожного виправлення окремо й не складаються. Другий звіт показує достовірне значення.
Для машин
- /api/openapi.json Опис OpenAPI, згенерований із того самого коду, який обслуговує API.
- /llms.txt, /llms-full.txt Коротка карта цього сайту для мовних моделей у форматі llms.txt і довша версія з повним циклом та полями звіту в одному файлі.
- /mcp Сервер MCP із тими самими можливостями та блокувальним очікуванням, що краще за опитування зсередини моделі.
- For agents Сторінка агента: коли це використовувати, як відрізнити пропущену перевірку від успішної та які результати є записами DNS, що має змінити людина, а не текстом, який може редагувати агент.
Спочатку спробуйте один раз вручну
Це займає близько хвилини й показує, що саме описує JSON.