Dokumentacja API
Te same sprawdzenia co na stronie, w formacie JSON. Każdy endpoint wypróbujesz bez klucza; do regularnego użycia utwórz klucz na koncie.
Szybki start
Wypróbuj sprawdzenie bez klucza — zapytania anonimowe mają niższe limity na adres klienta:
curl -s "https://correct.email/api/v1/spf?domain=example.com"Utwórz klucz API na koncie i trzymaj go w zmiennej środowiskowej, nigdy w kodzie: Utwórz klucz API
export CORRECT_EMAIL_API_KEY=ce_live_…Wysyłaj go jako token typu Bearer. Sprawdzenia z kluczem wliczają się do dziennego limitu konta:
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \ "https://correct.email/api/v1/dmarc?domain=example.com"
Klucze API
Klucze mają postać ce_live_…; przechowujemy tylko ich skrót, więc klucz widać tylko raz — przy tworzeniu. Wysyłaj go w nagłówku Authorization: Bearer ce_live_….
Nigdy nie umieszczaj klucza na stronie internetowej ani w aplikacji mobilnej. Zapytania, które przeglądarka wysyła w imieniu innej witryny (Sec-Fetch-Site: cross-site), są odrzucane — z kluczem i bez niego.
Aby wymienić klucz bez przerwy w działaniu, użyj na koncie opcji „Wymień klucz”: nowy sekret działa od razu, a stary jeszcze przez 24 godziny (przez API od 0 do 168 godzin). Jeśli klucz wyciekł, unieważnij go — skutek jest natychmiastowy.
Na koncie widać liczbę sprawdzeń przez API z ostatnich 30 dni w podziale na dni, klucze i rodzaje sprawdzeń.
Odpowiedzi
Każde sprawdzenie odpowiada kodem 200 w tej samej kopercie, także gdy wykryje problemy — błędy HTTP oznaczają tylko zapytania, których nie dało się wykonać.
| Pole | Znaczenie |
|---|---|
check | które sprawdzenie wykonano ("spf", "dmarc"…) |
checkedAt | kiedy (UTC) |
durationMs | ile trwało |
dnsQueries | liczba zapytań DNS (każde sprawdzenie ma stały budżet) |
result | wynik: status, uwagi i pola właściwe dla sprawdzenia (opis przy każdym endpoincie) |
result.status
| Pole | Znaczenie |
|---|---|
pass | bez problemów |
warn | działa, ale są ostrzeżenia |
fail | problemy, które wpływają na pocztę |
error | sprawdzenia nie udało się dokończyć (np. timeout DNS) — to nie ocena domeny |
result.findings to lista uwag. Każda ma stały kod (np. spf.too_many_lookups), poziom (error, warning, info, ok), krótki opis po angielsku i — dla niektórych kodów — parametry. Porównuj kody; treść opisu może się zmienić.
Limity
Domyślne limity (operator może je zmienić; aktualne wartości zawsze podaje nagłówek RateLimit-Policy):
| Kto | Limit |
|---|---|
| Bez klucza, jedno sprawdzenie | około 20 zapytań na minutę z adresu klienta, seriami do 10 |
| Bez klucza, wszystkie sprawdzenia | 60 zapytań na minutę z adresu klienta |
| Wolne sprawdzenia (dnsbl, smtp, propagation, dmarc-report) | 6 na minutę, seriami do 3 |
| Z kluczem | 30 zapytań na minutę na klucz |
| Dzienny limit planu bezpłatnego | 300 sprawdzeń na konto (odnawia się o północy UTC) |
Nagłówki limitów
| Nagłówek | Znaczenie |
|---|---|
RateLimit-Policy | obowiązujące limity, np. "check";q=10;w=30 — q zapytań na w sekund (draft-ietf-httpapi-ratelimit-headers-11, wciąż szkic) |
RateLimit | ile zostało, np. "check";r=9;t=3 — r zapytań teraz, pełny limit wraca po t sekundach; dla "daily" t to czas do odnowienia |
X-Quota-Limit, X-Quota-Remaining, X-Quota-Reset | dzienny limit konta (zapytania z kluczem), odnowienie jako czas Unix |
Retry-After | przy 429 i 503: ile sekund odczekać przed ponowieniem |
X-Request-Id | podaj go, zgłaszając problem |
Ponawianie po 429 lub 503
# --retry honours Retry-After on 429 and 503
curl -s --retry 3 -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
"https://correct.email/api/v1/mx?domain=example.com"Błędy
Błędy mają kod HTTP i treść JSON {"error": {"code": "…", "message": "…"}}. Kod jest stały; opis to krótkie wyjaśnienie po angielsku.
| Kod | HTTP | Znaczenie |
|---|---|---|
domain_empty | 400 | Brak parametru domain albo parametr jest pusty. |
domain_too_long | 400 | Nazwa domeny ma więcej niż 253 znaki. |
domain_label_length | 400 | Część nazwy domeny jest pusta albo dłuższa niż 63 znaki. |
domain_invalid | 400 | Nazwa domeny zawiera niedozwolone znaki. |
domain_single_label | 400 | Nazwa nie ma kropki (np. „localhost”). |
domain_ip_literal | 400 | Podano adres IP zamiast nazwy domeny. |
domain_reserved | 400 | Nazwa ma zarezerwowaną lub prywatną końcówkę (.local, .test, .invalid…). |
domain_numeric_tld | 400 | Ostatnia część nazwy jest liczbą. |
selector_empty | 400 | Brak selektora DKIM. |
selector_invalid | 400 | Selektor zawiera niedozwolone znaki. |
ip_not_public | 400 | Adres jest prywatny, zarezerwowany albo z innego powodu niepubliczny. |
type_invalid | 400 | Ten typ rekordu nie jest obsługiwany. |
invalid_input | 400 | Parametr jest niepoprawny. |
report_format | 400 | Treść nie jest zbiorczym raportem DMARC (albo jest pusta). |
report_archive | 400 | Archiwum jest uszkodzone albo nie zawiera dokładnie jednego raportu XML. |
report_xml | 400 | XML jest niepoprawny albo używa niedozwolonych elementów (DTD, encje). |
report_not_dmarc | 400 | XML nie jest zbiorczym raportem DMARC. |
report_no_domain | 400 | Raport nie podaje domeny, której dotyczy. |
invalid_api_key | 401 | Klucz API ma zły format, jest nieznany lub unieważniony albo minął okres przejściowy po jego wymianie. |
cross_site | 403 | Przeglądarka wysłała zapytanie w imieniu innej witryny. |
method_not_allowed | 405 | Niedozwolona metoda HTTP; zobacz nagłówek Allow. |
report_too_large | 413 | Raport przekracza limit rozmiaru lub liczby rekordów. |
query_too_long | 414 | Zapytanie (query string) jest za długie. |
rate_limited | 429 | Przekroczono limit dla adresu lub klucza; odczekaj Retry-After sekund. |
quota_exceeded | 429 | Dzienny limit konta został wykorzystany; odnawia się o północy UTC. |
domain_busy | 429 | Ta sama domena jest właśnie sprawdzana zbyt wiele razy naraz. |
internal | 500 | Nieoczekiwany błąd serwera; zgłaszając go, podaj X-Request-Id. |
busy | 503 | Serwis jest przeciążony; ponów po kilku sekundach. |
smtp_disabled | 503 | Test SMTP jest wyłączony na tym serwerze. |
client_timeout | 504 | Sprawdzenie nie zakończyło się na czas. |
Endpointy
Adres bazowy: https://correct.email/api/v1. Wszystkie sprawdzenia to zapytania GET z parametrami, poza analizą raportu DMARC, która przyjmuje plik jako treść zapytania.
GET /bimi
Sprawdza rekord BIMI, logo SVG, certyfikat znaku i wymagania DMARC. To samo sprawdzenie na stronie
| Parametr | Wymagany | Znaczenie | Przykład |
|---|---|---|---|
domain | tak | Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane. | example.com |
selector | nie | Selektor DKIM lub BIMI. | default |
Pola wyniku (BimiResult)
| Pole | Typ |
|---|---|
declined | boolean |
domain | string |
findings | Finding[] |
name | string |
selector | string |
status | "pass" | "warn" | "fail" | "error" |
tags | TaglistTag[] |
dmarc? | BimiDMARCSummary |
evidence? | BimiEvidence |
evidenceUrl? | string |
logo? | BimiLogo |
logoUrl? | string |
record? | string |
recordDomain? | string |
records? | string[] |
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
"https://correct.email/api/v1/bimi?domain=example.com"GET /dkim
Pobiera klucz z <selektor>._domainkey.<domena> i sprawdza typ, długość klucza i tagi. To samo sprawdzenie na stronie
| Parametr | Wymagany | Znaczenie | Przykład |
|---|---|---|---|
domain | tak | Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane. | example.com |
selector | tak | Selektor DKIM lub BIMI. | selector1 |
Pola wyniku (DkimResult)
| Pole | Typ |
|---|---|
dnssec | boolean |
domain | string |
findings | Finding[] |
name | string |
selector | string |
status | "pass" | "warn" | "fail" | "error" |
tags | TaglistTag[] |
cnames? | string[] |
flags? | string[] |
hashes? | string[] |
key? | DkimKeyInfo |
notes? | string |
record? | string |
services? | string[] |
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
"https://correct.email/api/v1/dkim?domain=example.com&selector=selector1"GET /dmarc
Znajduje rekord DMARC obowiązujący dla domeny, wyjaśnia politykę i sprawdza zewnętrzne adresy raportów. To samo sprawdzenie na stronie
| Parametr | Wymagany | Znaczenie | Przykład |
|---|---|---|---|
domain | tak | Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane. | example.com |
Pola wyniku (DmarcResult)
| Pole | Typ |
|---|---|
context | DmarcContext |
dnssec | boolean |
domain | string |
findings | Finding[] |
reporting | DmarcReporting |
status | "pass" | "warn" | "fail" | "error" |
tags | DmarcTagInfo[] |
walk | DmarcWalkStep[] |
orgDomain? | string |
policy? | DmarcPolicy |
pslOrgDomain? | string |
record? | string |
recordDomain? | string |
source? | string |
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
"https://correct.email/api/v1/dmarc?domain=example.com"POST /dmarc-report
Analizuje jeden zbiorczy raport DMARC przesłany jako treść zapytania: uwierzytelnienie, zgodność domen, źródła wysyłki i zalecenia. To samo sprawdzenie na stronie
Treść zapytania: plik raportu (XML albo ZIP/GZIP z jednym plikiem XML) — do 1 MB przesłanych danych, 5 MB XML i 5000 rekordów. Raport nie jest zapisywany.
Pola wyniku (DmarcReportAnalysis)
| Pole | Typ |
|---|---|
categories | map of integer |
dispositions | map of integer |
dkimAligned | integer |
findings | Finding[] |
invalid | integer |
messages | integer |
metadata | DmarcReportMetadata |
passed | integer |
passRate | number |
policy | DmarcReportPolicy |
providers | map of integer |
reverseDnsChecked | integer |
skipped | integer |
sourceCount | integer |
sources | DmarcReportSource[] |
spfAligned | integer |
status | "pass" | "warn" | "fail" | "error" |
curl -s -X POST \
-H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
-H "Content-Type: application/xml" \
--data-binary @report.xml \
"https://correct.email/api/v1/dmarc-report"GET /dnsbl
Odpytuje listy blokad IP, których warunki pozwalają na takie użycie. Lista, która nie odpowiedziała, jest oznaczona jako niesprawdzona — nigdy jako czysta. To samo sprawdzenie na stronie
| Parametr | Wymagany | Znaczenie | Przykład |
|---|---|---|---|
target | tak | Publiczny adres IPv4 lub IPv6 albo nazwa hosta. | mx.example.com |
Pola wyniku (DnsblResult)
| Pole | Typ |
|---|---|
addresses | DnsblAddressResult[] |
cached | boolean |
checkedAt | string (date-time) |
findings | Finding[] |
status | "pass" | "warn" | "fail" | "error" |
target | string |
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
"https://correct.email/api/v1/dnsbl?target=mx.example.com"GET /mtasts
Sprawdza rekord _mta-sts, pobiera politykę przez HTTPS, porównuje ją z serwerami MX i dołącza wynik TLS-RPT. To samo sprawdzenie na stronie
| Parametr | Wymagany | Znaczenie | Przykład |
|---|---|---|---|
domain | tak | Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane. | example.com |
Pola wyniku (MtaStsResult)
| Pole | Typ |
|---|---|
domain | string |
findings | Finding[] |
mx | MtaStsMXMatch[] |
name | string |
policyUrl | string |
status | "pass" | "warn" | "fail" | "error" |
cnames? | string[] |
fetch? | FetchResponse |
id? | string |
policy? | MtaStsPolicy |
record? | string |
records? | string[] |
tlsrpt? | TlsRptResult |
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
"https://correct.email/api/v1/mtasts?domain=example.com"GET /mx
Wyświetla serwery MX z adresami, wykrywa null MX, rekordy CNAME i adresy prywatne oraz rozpoznaje znanych dostawców poczty. To samo sprawdzenie na stronie
| Parametr | Wymagany | Znaczenie | Przykład |
|---|---|---|---|
domain | tak | Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane. | example.com |
Pola wyniku (MxResult)
| Pole | Typ |
|---|---|
acceptsMail | string |
dnssec | boolean |
domain | string |
findings | Finding[] |
nullMx | boolean |
providers | MxProvider[] |
records | MxHost[] |
status | "pass" | "warn" | "fail" | "error" |
ttl | integer |
implicit? | MxImplicit |
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
"https://correct.email/api/v1/mx?domain=example.com"GET /propagation
Odpytuje publiczne resolwery i serwery autorytatywne domeny o jeden typ rekordu i porównuje odpowiedzi. To samo sprawdzenie na stronie
| Parametr | Wymagany | Znaczenie | Przykład |
|---|---|---|---|
domain | tak | Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane. | example.com |
type | nie | Typ rekordu do porównania. A, AAAA, CAA, CNAME, MX, NS, TXT | TXT |
Pola wyniku (PropagationResult)
| Pole | Typ |
|---|---|
answers | PropagationServerAnswer[] |
consistent | boolean |
domain | string |
findings | Finding[] |
reference | string[] |
status | "pass" | "warn" | "fail" | "error" |
type | string |
zone? | string |
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
"https://correct.email/api/v1/propagation?domain=example.com&type=TXT"GET /rdns
Sprawdza rekord PTR adresu i to, czy nazwa wskazuje z powrotem na ten adres (FCrDNS). To samo sprawdzenie na stronie
| Parametr | Wymagany | Znaczenie | Przykład |
|---|---|---|---|
target | tak | Publiczny adres IPv4 lub IPv6 albo nazwa hosta. | mx.example.com |
Pola wyniku (RdnsResult)
| Pole | Typ |
|---|---|
findings | Finding[] |
ips | RdnsIPResult[] |
isIp | boolean |
status | "pass" | "warn" | "fail" | "error" |
target | string |
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
"https://correct.email/api/v1/rdns?target=mx.example.com"GET /smtp
Łączy się z serwerami MX na porcie 25 i sprawdza STARTTLS, wersję TLS i certyfikat. Nie wysyła poczty. To samo sprawdzenie na stronie
| Parametr | Wymagany | Znaczenie | Przykład |
|---|---|---|---|
domain | tak | Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane. | example.com |
Pola wyniku (SmtpResult)
| Pole | Typ |
|---|---|
domain | string |
findings | Finding[] |
hosts | SmtpHostResult[] |
status | "pass" | "warn" | "fail" | "error" |
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
"https://correct.email/api/v1/smtp?domain=example.com"GET /spf
Pobiera rekord SPF, przechodzi przez include i redirect, liczy zapytania DNS względem limitu 10 i wskazuje błędy składni i polityki. To samo sprawdzenie na stronie
| Parametr | Wymagany | Znaczenie | Przykład |
|---|---|---|---|
domain | tak | Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane. | example.com |
Pola wyniku (SpfResult)
| Pole | Typ |
|---|---|
dnssec | boolean |
domain | string |
findings | Finding[] |
lookups | SpfLookupStats |
networks | SpfNetworks |
status | "pass" | "warn" | "fail" | "error" |
record? | string |
records? | string[] |
recordStrings? | string[] |
tree? | SpfNode |
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
"https://correct.email/api/v1/spf?domain=example.com"GET /tlsrpt
Sprawdza rekord _smtp._tls i adresy odbiorców raportów. To samo sprawdzenie na stronie
| Parametr | Wymagany | Znaczenie | Przykład |
|---|---|---|---|
domain | tak | Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane. | example.com |
Pola wyniku (TlsRptResult)
| Pole | Typ |
|---|---|
domain | string |
fields | TlsRptField[] |
findings | Finding[] |
name | string |
rua | ReportUriDestination[] |
status | "pass" | "warn" | "fail" | "error" |
cnames? | string[] |
record? | string |
records? | string[] |
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
"https://correct.email/api/v1/tlsrpt?domain=example.com"