Przejdź do treści
correct.email

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.

Utwórz klucz APIDokument OpenAPI 3.1 (JSON)

Szybki start

  1. 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"
  2. 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_…
  3. 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ć.

PoleZnaczenie
checkktóre sprawdzenie wykonano ("spf", "dmarc"…)
checkedAtkiedy (UTC)
durationMsile trwało
dnsQueriesliczba zapytań DNS (każde sprawdzenie ma stały budżet)
resultwynik: status, uwagi i pola właściwe dla sprawdzenia (opis przy każdym endpoincie)

result.status

PoleZnaczenie
passbez problemów
warndziała, ale są ostrzeżenia
failproblemy, które wpływają na pocztę
errorsprawdzenia 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):

KtoLimit
Bez klucza, jedno sprawdzenieokoło 20 zapytań na minutę z adresu klienta, seriami do 10
Bez klucza, wszystkie sprawdzenia60 zapytań na minutę z adresu klienta
Wolne sprawdzenia (dnsbl, smtp, propagation, dmarc-report)6 na minutę, seriami do 3
Z kluczem30 zapytań na minutę na klucz
Dzienny limit planu bezpłatnego300 sprawdzeń na konto (odnawia się o północy UTC)

Nagłówki limitów

NagłówekZnaczenie
RateLimit-Policyobowiązujące limity, np. "check";q=10;w=30 — q zapytań na w sekund (draft-ietf-httpapi-ratelimit-headers-11, wciąż szkic)
RateLimitile 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-Resetdzienny limit konta (zapytania z kluczem), odnowienie jako czas Unix
Retry-Afterprzy 429 i 503: ile sekund odczekać przed ponowieniem
X-Request-Idpodaj 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.

KodHTTPZnaczenie
domain_empty400Brak parametru domain albo parametr jest pusty.
domain_too_long400Nazwa domeny ma więcej niż 253 znaki.
domain_label_length400Część nazwy domeny jest pusta albo dłuższa niż 63 znaki.
domain_invalid400Nazwa domeny zawiera niedozwolone znaki.
domain_single_label400Nazwa nie ma kropki (np. „localhost”).
domain_ip_literal400Podano adres IP zamiast nazwy domeny.
domain_reserved400Nazwa ma zarezerwowaną lub prywatną końcówkę (.local, .test, .invalid…).
domain_numeric_tld400Ostatnia część nazwy jest liczbą.
selector_empty400Brak selektora DKIM.
selector_invalid400Selektor zawiera niedozwolone znaki.
ip_not_public400Adres jest prywatny, zarezerwowany albo z innego powodu niepubliczny.
type_invalid400Ten typ rekordu nie jest obsługiwany.
invalid_input400Parametr jest niepoprawny.
report_format400Treść nie jest zbiorczym raportem DMARC (albo jest pusta).
report_archive400Archiwum jest uszkodzone albo nie zawiera dokładnie jednego raportu XML.
report_xml400XML jest niepoprawny albo używa niedozwolonych elementów (DTD, encje).
report_not_dmarc400XML nie jest zbiorczym raportem DMARC.
report_no_domain400Raport nie podaje domeny, której dotyczy.
invalid_api_key401Klucz API ma zły format, jest nieznany lub unieważniony albo minął okres przejściowy po jego wymianie.
cross_site403Przeglądarka wysłała zapytanie w imieniu innej witryny.
method_not_allowed405Niedozwolona metoda HTTP; zobacz nagłówek Allow.
report_too_large413Raport przekracza limit rozmiaru lub liczby rekordów.
query_too_long414Zapytanie (query string) jest za długie.
rate_limited429Przekroczono limit dla adresu lub klucza; odczekaj Retry-After sekund.
quota_exceeded429Dzienny limit konta został wykorzystany; odnawia się o północy UTC.
domain_busy429Ta sama domena jest właśnie sprawdzana zbyt wiele razy naraz.
internal500Nieoczekiwany błąd serwera; zgłaszając go, podaj X-Request-Id.
busy503Serwis jest przeciążony; ponów po kilku sekundach.
smtp_disabled503Test SMTP jest wyłączony na tym serwerze.
client_timeout504Sprawdzenie 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

ParametrWymaganyZnaczeniePrzykład
domaintakNazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.example.com
selectornieSelektor DKIM lub BIMI.default
Pola wyniku (BimiResult)
PoleTyp
declinedboolean
domainstring
findingsFinding[]
namestring
selectorstring
status"pass" | "warn" | "fail" | "error"
tagsTaglistTag[]
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"

Wypróbuj

Wysyła prawdziwe zapytanie z Twojej przeglądarki, bez klucza, z limitami anonimowymi.

Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.

Selektor DKIM lub BIMI.

GET /api/v1/bimi?domain=example.com&selector=default

GET /dkim

Pobiera klucz z <selektor>._domainkey.<domena> i sprawdza typ, długość klucza i tagi. To samo sprawdzenie na stronie

ParametrWymaganyZnaczeniePrzykład
domaintakNazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.example.com
selectortakSelektor DKIM lub BIMI.selector1
Pola wyniku (DkimResult)
PoleTyp
dnssecboolean
domainstring
findingsFinding[]
namestring
selectorstring
status"pass" | "warn" | "fail" | "error"
tagsTaglistTag[]
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"

Wypróbuj

Wysyła prawdziwe zapytanie z Twojej przeglądarki, bez klucza, z limitami anonimowymi.

Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.

Selektor DKIM lub BIMI.

GET /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

ParametrWymaganyZnaczeniePrzykład
domaintakNazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.example.com
Pola wyniku (DmarcResult)
PoleTyp
contextDmarcContext
dnssecboolean
domainstring
findingsFinding[]
reportingDmarcReporting
status"pass" | "warn" | "fail" | "error"
tagsDmarcTagInfo[]
walkDmarcWalkStep[]
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"

Wypróbuj

Wysyła prawdziwe zapytanie z Twojej przeglądarki, bez klucza, z limitami anonimowymi.

Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.

GET /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)
PoleTyp
categoriesmap of integer
dispositionsmap of integer
dkimAlignedinteger
findingsFinding[]
invalidinteger
messagesinteger
metadataDmarcReportMetadata
passedinteger
passRatenumber
policyDmarcReportPolicy
providersmap of integer
reverseDnsCheckedinteger
skippedinteger
sourceCountinteger
sourcesDmarcReportSource[]
spfAlignedinteger
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"

Wypróbuj

Wysyła prawdziwe zapytanie z Twojej przeglądarki, bez klucza, z limitami anonimowymi.

Bez pliku zostanie wysłany przykładowy raport.

POST /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

ParametrWymaganyZnaczeniePrzykład
targettakPubliczny adres IPv4 lub IPv6 albo nazwa hosta.mx.example.com
Pola wyniku (DnsblResult)
PoleTyp
addressesDnsblAddressResult[]
cachedboolean
checkedAtstring (date-time)
findingsFinding[]
status"pass" | "warn" | "fail" | "error"
targetstring
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
  "https://correct.email/api/v1/dnsbl?target=mx.example.com"

Wypróbuj

Wysyła prawdziwe zapytanie z Twojej przeglądarki, bez klucza, z limitami anonimowymi.

Publiczny adres IPv4 lub IPv6 albo nazwa hosta.

GET /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

ParametrWymaganyZnaczeniePrzykład
domaintakNazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.example.com
Pola wyniku (MtaStsResult)
PoleTyp
domainstring
findingsFinding[]
mxMtaStsMXMatch[]
namestring
policyUrlstring
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"

Wypróbuj

Wysyła prawdziwe zapytanie z Twojej przeglądarki, bez klucza, z limitami anonimowymi.

Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.

GET /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

ParametrWymaganyZnaczeniePrzykład
domaintakNazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.example.com
Pola wyniku (MxResult)
PoleTyp
acceptsMailstring
dnssecboolean
domainstring
findingsFinding[]
nullMxboolean
providersMxProvider[]
recordsMxHost[]
status"pass" | "warn" | "fail" | "error"
ttlinteger
implicit?MxImplicit
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
  "https://correct.email/api/v1/mx?domain=example.com"

Wypróbuj

Wysyła prawdziwe zapytanie z Twojej przeglądarki, bez klucza, z limitami anonimowymi.

Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.

GET /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

ParametrWymaganyZnaczeniePrzykład
domaintakNazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.example.com
typenieTyp rekordu do porównania. A, AAAA, CAA, CNAME, MX, NS, TXTTXT
Pola wyniku (PropagationResult)
PoleTyp
answersPropagationServerAnswer[]
consistentboolean
domainstring
findingsFinding[]
referencestring[]
status"pass" | "warn" | "fail" | "error"
typestring
zone?string
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
  "https://correct.email/api/v1/propagation?domain=example.com&type=TXT"

Wypróbuj

Wysyła prawdziwe zapytanie z Twojej przeglądarki, bez klucza, z limitami anonimowymi.

Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.

Typ rekordu do porównania.

GET /api/v1/propagation?domain=example.com&type=A

GET /rdns

Sprawdza rekord PTR adresu i to, czy nazwa wskazuje z powrotem na ten adres (FCrDNS). To samo sprawdzenie na stronie

ParametrWymaganyZnaczeniePrzykład
targettakPubliczny adres IPv4 lub IPv6 albo nazwa hosta.mx.example.com
Pola wyniku (RdnsResult)
PoleTyp
findingsFinding[]
ipsRdnsIPResult[]
isIpboolean
status"pass" | "warn" | "fail" | "error"
targetstring
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
  "https://correct.email/api/v1/rdns?target=mx.example.com"

Wypróbuj

Wysyła prawdziwe zapytanie z Twojej przeglądarki, bez klucza, z limitami anonimowymi.

Publiczny adres IPv4 lub IPv6 albo nazwa hosta.

GET /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

ParametrWymaganyZnaczeniePrzykład
domaintakNazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.example.com
Pola wyniku (SmtpResult)
PoleTyp
domainstring
findingsFinding[]
hostsSmtpHostResult[]
status"pass" | "warn" | "fail" | "error"
curl -s -H "Authorization: Bearer $CORRECT_EMAIL_API_KEY" \
  "https://correct.email/api/v1/smtp?domain=example.com"

Wypróbuj

Wysyła prawdziwe zapytanie z Twojej przeglądarki, bez klucza, z limitami anonimowymi.

Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.

GET /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

ParametrWymaganyZnaczeniePrzykład
domaintakNazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.example.com
Pola wyniku (SpfResult)
PoleTyp
dnssecboolean
domainstring
findingsFinding[]
lookupsSpfLookupStats
networksSpfNetworks
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"

Wypróbuj

Wysyła prawdziwe zapytanie z Twojej przeglądarki, bez klucza, z limitami anonimowymi.

Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.

GET /api/v1/spf?domain=example.com

GET /tlsrpt

Sprawdza rekord _smtp._tls i adresy odbiorców raportów. To samo sprawdzenie na stronie

ParametrWymaganyZnaczeniePrzykład
domaintakNazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.example.com
Pola wyniku (TlsRptResult)
PoleTyp
domainstring
fieldsTlsRptField[]
findingsFinding[]
namestring
ruaReportUriDestination[]
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"

Wypróbuj

Wysyła prawdziwe zapytanie z Twojej przeglądarki, bez klucza, z limitami anonimowymi.

Nazwa domeny; nazwy ze znakami narodowymi (IDN) są przyjmowane i konwertowane.

GET /api/v1/tlsrpt?domain=example.com