Inspect cPanel email authentication records

GET /api/v2/shared-hosting/{accountId}/email-deliverability

Read cPanel Email Deliverability's current DKIM, SPF and DMARC validation for one domain hosted on the account.

The response includes cPanel's exact required DKIM TXT owner and public value.

This endpoint is strictly read-only: it does not generate DKIM keys and does not install or change DNS records.

spf.state: valid_hostup_policy means cPanel's generated direct-IP/MailChannels comparison reports a warning while the domain uses HostUp's centralized include:spf.hostup.se sending policy; clients must not replace that policy with a second SPF record.

The domain must belong to the cPanel account.

Web Hosting Email

Authentication

Required API scopes: read:hostingconsole:services

Authenticate with an API key in the Authorization: Bearer <token> header.

Context

Path Parameters

accountId string required Example: acct_01hxa3b4c5d6e7f8g9h0j1k2m3

Public shared-hosting account ID. Get it from GET /api/v2/shared-hosting data[].id. Do not invent this value; use the exact ID returned by the referenced API response.

Query Parameters

domain string required · Example: example.com

Hosted domain whose DKIM, SPF and DMARC records should be inspected.

Headers

Authorization Bearer <token>
Accept application/json

Responses

200 Current cPanel email-authentication assessment and required public records.
domain string required · Example: example.com
readOnly boolean · enum required
true
source string · enum required
cpanel_emailauth
dkim object required
dkim.state string · enum required
valid
missing
invalid
unknown
dkim.cpanelState string required · Example: VALID
dkim.name string · nullable required · Example: default._domainkey.example.com

Nullable: may be null when not applicable.

dkim.type string · enum required
TXT
dkim.requiredValue string · nullable required · Example: v=DKIM1; k=rsa; p=MIIBIjANBgkqh...;

Nullable: may be null when not applicable.

dkim.currentValues array<string> required
dkim.matchesRequired boolean required
dkim.error string · nullable required

Nullable: may be null when not applicable.

spf object required
spf.state string · enum required
valid
valid_hostup_policy
missing
invalid
unknown
spf.cpanelState string required · Example: INVALID
spf.name string required · Example: example.com
spf.type string · enum required
TXT
spf.cpanelRequiredMechanisms string · nullable required · Example: ip4:185.113.11.23 include:relay.mailchannels.net

Nullable: may be null when not applicable.

spf.currentValues array<string> required
spf.sendingIp string · nullable required · Example: 185.113.11.23

Nullable: may be null when not applicable.

spf.hostupPolicyDetected boolean required
spf.explanation string · nullable required

Nullable: may be null when not applicable.

spf.error string · nullable required

Nullable: may be null when not applicable.

dmarc object required
dmarc.state string · enum required
valid
valid_with_cpanel_spf_warning
missing
invalid
unknown
dmarc.cpanelState string required · Example: SPF_ERROR
dmarc.name string required · Example: _dmarc.example.com
dmarc.type string · enum required
TXT
dmarc.currentValue string · nullable required · Example: v=DMARC1; p=quarantine

Nullable: may be null when not applicable.

dmarc.explanation string · nullable required

Nullable: may be null when not applicable.

dmarc.error string · nullable required

Nullable: may be null when not applicable.

decision string · enum required
configured
action_required
unavailable
nextAction object required
nextAction.code string · enum required
none
publish_dkim
generate_dkim_key
review_spf
review_dmarc
retry_later
nextAction.message string required
400 Invalid request. The response body is an RFC 7807 Problem Details document.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
401 Unauthorized. Authentication is required.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
403 The requested domain is not hosted on this account.

No response body

404 Not found. The resource does not exist or is not owned by the caller.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
409 The account is not on the cPanel platform.

No response body

429 Rate limited. Retry after the limit resets. 429 responses include Retry-After seconds plus X-RateLimit-* headers.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
500 Internal error. Retry later or contact support if the issue persists.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on detail.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when code is invalid_request.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
502 cPanel email-authentication validation is temporarily unavailable.

No response body

GET https://cloud.hostup.se/api/v2/shared-hosting/{accountId}/email-deliverability
For AI assistants
View as Markdown
cURL
curl -X GET "https://cloud.hostup.se/api/v2/shared-hosting/acct_01hxa3b4c5d6e7f8g9h0j1k2m3/email-deliverability?domain=example.com" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"
Response
{
  "domain": "example.com",
  "readOnly": true,
  "source": "cpanel_emailauth",
  "dkim": {
    "state": "valid",
    "cpanelState": "VALID",
    "name": "default._domainkey.example.com",
    "type": "TXT",
    "requiredValue": "v=DKIM1; k=rsa; p=MIIBIjANBgkqh...;",
    "currentValues": [
      "v=DKIM1; k=rsa; p=MIIBIjANBgkqh...;"
    ],
    "matchesRequired": true,
    "error": null
  },
  "spf": {
    "state": "valid_hostup_policy",
    "cpanelState": "INVALID",
    "name": "example.com",
    "type": "TXT",
    "cpanelRequiredMechanisms": "ip4:185.113.11.23 include:relay.mailchannels.net",
    "currentValues": [
      "v=spf1 mx include:spf.hostup.se ~all"
    ],
    "sendingIp": "185.113.11.23",
    "hostupPolicyDetected": true,
    "explanation": "cPanel reports its generated direct IP and MailChannels mechanisms as missing, but this domain uses HostUp's centralized include:spf.hostup.se policy, which intentionally covers that HostUp sending path. Do not replace it with cPanel's expanded suggestion.",
    "error": null
  },
  "dmarc": {
    "state": "valid_with_cpanel_spf_warning",
    "cpanelState": "SPF_ERROR",
    "name": "_dmarc.example.com",
    "type": "TXT",
    "currentValue": "v=DMARC1; p=quarantine",
    "explanation": "The DMARC TXT record is present. cPanel's DMARC warning is inherited from the same SPF mechanism-comparison warning, not from a missing DMARC record.",
    "error": "SPF record not valid"
  },
  "decision": "configured",
  "nextAction": {
    "code": "none",
    "message": "No DNS change is required from this cPanel Email Deliverability result."
  }
}