Skip to content

Run an email authentication check

POST
/api/v1/deliverability/check
curl --request POST \
--url https://app.hostrepute.com/api/v1/deliverability/check \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "host": "example.com", "data_source_group_uuid": "01a178db-d581-700d-9729-4f4abc8cee72", "checks": [ "mx_health", "spf_record", "dmarc_record" ] }'

Check a domain’s or IP’s email authentication records now and get the result in the response. status is the overall result: passed, warning or failed. Each entry in result.checks has its own status (passed, warning, failed or skipped) and a message; checks that only apply to IP addresses are skipped for a domain. meta shows what the check cost and the credits your team has left.

Costs 1 credit. Needs the deliverability:check ability.

Media typeapplication/json
object
host
required

The domain or IP address to check. A URL is accepted and its host name is used.

string

Example

example.com
data_source_group_uuid

The UUID of a check profile. When you leave out checks, the profile’s email authentication checks run.

string
nullable

Example

01a178db-d581-700d-9729-4f4abc8cee72
checks

The checks to run, from reverse_dns, forward_confirmed_reverse_dns, generic_ptr, ptr_hostname_format, mx_health, spf_record, spf_strict, spf_lookup_limit, dmarc_record, dmarc_strict, mta_sts, tls_rpt and bimi. Without checks or data_source_group_uuid, all 13 run. Read https://docs.hostrepute.com/reference/email-authentication-checks/ for what each one verifies.

Array<string>

Example

[
"mx_health",
"spf_record",
"dmarc_record"
]
Media typeapplication/json
object
data
object
uuid
string
host
string
status
string
result
object
summary
object
skipped
integer
failed
integer
passed
integer
warning
integer
checks
Array<object>
object
type
string
label
string
status
string
message
string
context
array
data_source_group
string
nullable
checked_at
string
created_at
string
meta
object
credit_cost
integer
credits_remaining
integer

Example

{
"data": {
"uuid": "01a178db-e1ee-72a1-b274-94bf06c7e8c7",
"host": "example.com",
"status": "failed",
"result": {
"summary": {
"skipped": 4,
"failed": 1,
"passed": 5,
"warning": 3
},
"checks": [
{
"type": "reverse_dns",
"label": "Reverse DNS",
"status": "skipped",
"message": "IP-only check skipped for domain target.",
"context": []
},
{
"type": "forward_confirmed_reverse_dns",
"label": "Forward-confirmed Reverse DNS",
"status": "skipped",
"message": "IP-only check skipped for domain target.",
"context": []
},
{
"type": "generic_ptr",
"label": "Generic PTR Pattern",
"status": "skipped",
"message": "IP-only check skipped for domain target.",
"context": []
},
{
"type": "ptr_hostname_format",
"label": "PTR Hostname Format",
"status": "skipped",
"message": "IP-only check skipped for domain target.",
"context": []
},
{
"type": "mx_health",
"label": "MX Health",
"status": "failed",
"message": "No MX records were found.",
"context": []
},
{
"type": "spf_record",
"label": "SPF Record",
"status": "passed",
"message": "One SPF record found.",
"context": {
"record": "v=spf1 -all"
}
},
{
"type": "spf_strict",
"label": "SPF Strict Policy",
"status": "passed",
"message": "SPF uses a strict fail-all policy.",
"context": {
"record": "v=spf1 -all"
}
},
{
"type": "spf_lookup_limit",
"label": "SPF Lookup Limit",
"status": "passed",
"message": "SPF is within the DNS lookup limit.",
"context": {
"record": "v=spf1 -all",
"lookup_count": 0,
"lookup_limit": 10
}
},
{
"type": "dmarc_record",
"label": "DMARC Record",
"status": "passed",
"message": "DMARC record found.",
"context": {
"record": "v=DMARC1;p=reject;sp=reject;adkim=s;aspf=s",
"policy": "reject"
}
},
{
"type": "dmarc_strict",
"label": "DMARC Strict Policy",
"status": "passed",
"message": "DMARC uses an enforcement policy.",
"context": {
"record": "v=DMARC1;p=reject;sp=reject;adkim=s;aspf=s",
"policy": "reject"
}
},
{
"type": "mta_sts",
"label": "MTA-STS Policy",
"status": "warning",
"message": "No MTA-STS DNS policy record was found.",
"context": {
"name": "_mta-sts.example.com"
}
},
{
"type": "tls_rpt",
"label": "TLS-RPT Record",
"status": "warning",
"message": "No TLS-RPT record was found.",
"context": {
"name": "_smtp._tls.example.com"
}
},
{
"type": "bimi",
"label": "BIMI Record",
"status": "warning",
"message": "No BIMI record was found.",
"context": {
"name": "default._bimi.example.com"
}
}
]
},
"data_source_group": null,
"checked_at": "2026-10-26T15:37:18.000000Z",
"created_at": "2026-10-26T15:37:18.000000Z"
},
"meta": {
"credit_cost": 1,
"credits_remaining": 4247
}
}

Not enough credits

Media typeapplication/json
object
message
string
required_credits
integer
available_credits
integer

Example

{
"message": "Insufficient credits.",
"required_credits": 1,
"available_credits": 0
}

No check profile with this UUID in your team

Media typeapplication/json
object
message
string

Example

{
"message": "Monitoring profile not found."
}

Invalid input

Media typeapplication/json
object
message
string
errors
object
checks.0
Array<string>

Example

{
"message": "The selected checks.0 is invalid.",
"errors": {
"checks.0": [
"The selected checks.0 is invalid."
]
}
}