Wypróbuj w środowisku testowym → Każdy endpoint ma przycisk, który uruchamia go w aktywnej usłudze. Nic tutaj nie wymaga klucza, więc żądanie wysłane z tej strony jest rzeczywiste: rezerwuje rzeczywisty adres i jest zliczane.
Cykl
Dwa żądania i jedna wiadomość e-mail. Trzecie wywołanie jest potrzebne tylko dlatego, że analiza trwa kilka sekund.
Zarezerwuj adres
Wyślij żądanie POST do punktu końcowego skrzynki odbiorczej. Otrzymasz adres, który przyjmuje dokładnie jedną wiadomość i wygasa po godzinie, oraz identyfikator, z którym powiązane są wszystkie pozostałe dane.
Wyślij na niego rzeczywistą wiadomość
Przez SMTP, z platformy, która wyśle kampanię. Połowa kontroli odczytuje nagłówki dodawane przez platformę wysyłającą, więc wiadomość utworzona ręcznie mierzy niewłaściwe rzeczy.
Odpytuj o status, a następnie odczytaj raport
Punkt końcowy statusu zwraca kilkaset bajtów i informuje, czy warto już pobrać pełny raport. Sam raport ma kilka tysięcy wierszy.
# 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"}} ] }
Uwierzytelnianie
Nie ma żadnego. Nie trzeba uzyskiwać klucza, ustawiać nagłówka ani tworzyć konta. Zwrócony slug jest uprawnieniem: każdy, kto go posiada, może odczytać ten raport, a nikt inny nie może go odgadnąć.
Punkty końcowe
Adres bazowy https://email-spam-tester.com. Wszystko zwraca JSON.
POST/api/v1/inbox
Rezerwuje adres jednorazowego użytku. Oba parametry są opcjonalne.
| lang | Język, w którym zostaną napisane plan naprawczy i wyniki poszczególnych testów, podany jako kod ISO. Jest ustalany teraz, ponieważ wiadomość dociera przez SMTP kilka minut później i nie zawiera żadnej wskazówki, kto na nią czeka. Nieznany kod powoduje użycie języka angielskiego. |
| utm_source, utm_medium, utm_campaign | Przekazywane do naszych narzędzi analitycznych. Przydatne, jeśli mierzysz własną integrację. |
GET/api/v1/tests/{slug}/status
Niewielki koszt odpytywania. Zwraca dwa pola stanu oraz postęp testów i nic więcej.
GET/api/v1/tests/{slug}
Cały raport. Zwraca 202, gdy adres jest zarezerwowany i nic jeszcze nie dotarło, oraz 200, gdy wiadomość już dotarła.
GET/api/v1/tests/{slug}/message
Wiadomość dokładnie w postaci, w jakiej została dostarczona: każdy nagłówek w kolejności przesłania, obie treści, lista załączników i surowe źródło. Jest pobierana osobno, ponieważ raport jest odpytywany, a ta odpowiedź może mieć rozmiar do megabajta.
PUT/api/v1/tests/{slug}/locale
Zmienia język rezerwacji, która nie została jeszcze użyta. Dla agenta, który dowiaduje się, w jakim języku czyta jego użytkownik, po tym, jak poprosił już o adres. Żądanie jest odrzucane po nadejściu wiadomości, ponieważ analiza już wtedy trwa.
GET/api/health
Kontrola aktywności. Bez uwierzytelniania, bez skutków ubocznych.
Odczytywanie raportu
Pola zawierające odpowiedź, w kolejności, w której prawdopodobnie będą potrzebne.
| score_ours | Od 0 do 100. Nasz model. Uwierzytelnianie i infrastruktura mają największą wagę, ponieważ decydują o dostarczeniu, zanim filtr przeczyta choćby jedno słowo treści. |
| score_compat | Od 0 do 10. Odtwarza wartość w stylu SpamAssassin, z którą użytkownicy już porównują wyniki, dzięki czemu raport można porównać z tym, co ktoś zobaczył gdzie indziej. |
| subscores | Ta sama skala od 0 do 100 dla każdej sekcji: auth, infra_spam, content, compliance. |
| checks[] | Wszystkie 41, każda ze statusem, jednowierszowym wynikiem, dowodami, na podstawie których podjęto decyzję, oraz wpływem na obie oceny. |
| checks[].citations | Skąd pochodzi ustalenie: sekcja RFC, zacytowana dosłownie, oraz strona, na której Google określa własne wymaganie. Opracowane ręcznie, a nie wygenerowane, więc można na nich polegać. |
| poprawki[] | Co zmienić, w odpowiedniej kolejności, wraz z liczbą punktów przypisaną każdej zmianie. Korzyści są obliczane przez ponowne wyznaczenie wyniku raportu, a nie szacowane. |
| kompletne | Fałsz, gdy nie można było wykonać testu. Niesprawdzony element nigdy nie jest zaliczony, więc traktuj wynik jako optymistyczny, dopóki ta wartość nie będzie prawdziwa. |
| adres_url_raportu | Strona czytelna dla człowieka. Przekaż ją osobie zamiast ściany tekstu JSON. |
Statusy
Test ma jeden z pięciu statusów, a różnica między dwoma z nich ma większe znaczenie, niż się wydaje.
| zaliczony | Test został wykonany i nie wykrył żadnych problemów. |
| ostrzeżenie | Warto naprawić. Kosztuje punkty. |
| niezaliczony | Może uniemożliwić dostarczenie. Kosztuje więcej punktów. |
| pomiń | Nie dotyczyło. Brak załączników do przeskanowania, brak części HTML do oceny. To nie jest wynik pozytywny. |
| błąd | Nie udało nam się tego ustalić. Wykluczono z punktacji i oznaczono, zamiast uznać za wynik pozytywny. |
analysis_status przyjmuje wartości received, analyzing, checks_ready, failed. ai_status przyjmuje wartości pending, running, ready, fallback, error. Raport deterministyczny jest ostateczny przy checks_ready; ai_status jedynie dodaje plan.
Co może zostać zwrócone
| 202 | Adres jest zarezerwowany i żadna wiadomość jeszcze nie dotarła. Treść zawiera adres, termin wygaśnięcia i język, więc klient, który nie utworzył rezerwacji, nadal może je wyświetlić. |
| 404 | Brak takiego identyfikatora. Nigdy nie istniał albo rezerwacja została zapomniana. |
| 410 | Adres wygasł przed nadejściem wiadomości. |
| 409 | Podjęto próbę zmiany języka po nadejściu wiadomości. |
| 429 | Limit bezpłatnych testów dla Twojego adresu. Obecnie w tej usłudze nie ma limitu na osobę; jeśli kiedykolwiek zostanie ustawiony, treść podaje, kiedy zostanie zresetowany. |
Cztery rzeczy, które warto wiedzieć
Jedna wiadomość na adres
Druga zostanie odrzucona. Wcześniejszy raport pozostanie bez zmian, o co właśnie chodzi.
Godzina na użycie
Adres wygasa; raport nie. Łącza do raportów są trwałe, więc łącze wklejone do zgłoszenia nadal działa.
Wysyłaj z platformy
Testowanie kampanii z konta osobistego mierzy to konto. Prawie wszystko w sekcji uwierzytelniania dotyczy infrastruktury wysyłającej, a nie tekstu.
Przetestuj ponownie po poprawkach
Oczekiwane korzyści są obliczane dla każdej poprawki z osobna i nie sumują się. Drugi raport podaje rzeczywisty wynik.
Dla maszyn
- /api/openapi.json Opis OpenAPI wygenerowany z tego samego kodu, który obsługuje API.
- /llms.txt, /llms-full.txt Krótka mapa tej witryny dla modeli językowych, zgodna z konwencją llms.txt, oraz dłuższa wersja z całym cyklem i polami raportu w jednym pliku.
- /mcp Serwer MCP o tych samych możliwościach i z oczekiwaniem blokującym, które jest lepsze niż odpytywanie z wnętrza modelu.
- For agents Strona dla agenta: kiedy z tego skorzystać, jak odróżnić pominiętą kontrolę od zakończonej powodzeniem i które ustalenia są rekordami DNS wymagającymi zmiany przez człowieka, a nie tekstem, który agent może edytować.
Najpierw wypróbuj ręcznie
Zajmuje to około minuty i pokazuje dokładnie to, co opisuje JSON.