AVAILABLE

Customer Data

Email Syntax & DNS Preflight Guard

Conservatively normalize email syntax and IDNA domains, inspect MX and null-MX routing evidence, compare identities, process bounded batches, and apply caller-defined onboarding policy.

CONTRACT

Predictable for agents. Legible for reviewers.

REST
POST /v1/email-preflight/policy-check
MCP tool
check_email_preflight_policy
Inputs
One caller-supplied address or public DNS domain; comparisons accept two addresses, syntax-only batches accept up to 1,000 items, and policy accepts up to 100 allowed or blocked domains.
Returns
CLEAR, REVIEW_REQUIRED, or BLOCKED with normalized Unicode and ASCII forms, explicit DNS route state, policy evidence, stable findings, and an agent-readable next action.
Latency
Synchronous; DNS operations use a 2.5-second resolver deadline
Usage unit
Email preflight operation

The suite also exposes /v1/email-preflight/inspect-address, /inspect-domain, /dns-preflight, /compare, and /batch-inspect plus /mcp/email-preflight. It never contacts SMTP, sends a message, proves mailbox existence, verifies deliverability, ownership, or consent, classifies disposable providers, scores reputation, or stores the payload. DNS-enabled operations disclose resolver access. Its RapidAPI release is queued for final external publication.

AGENT-READABLE EXCEPTIONS

EMAIL_SYNTAX_INVALIDEMAIL_DOMAIN_INVALIDEMAIL_DOMAIN_NULL_MXEMAIL_DOMAIN_NXDOMAINEMAIL_DOMAIN_NO_MAIL_ROUTEEMAIL_DNS_INDETERMINATEEMAIL_LOCAL_PART_DIFFERSEMAIL_PLUS_TAG_DIFFERSEMAIL_DOMAIN_BLOCKEDEMAIL_DOMAIN_NOT_ALLOWEDEMAIL_ASCII_REQUIREDEMAIL_POLICY_DOMAIN_CONFLICT
HTTP request
POST /v1/email-preflight/policy-check
Authorization: Bearer apc_...
Content-Type: application/json

{
  "email": "buyer+trial@billing.example.com",
  "policy_name": "crm-import",
  "allowed_domains": [
    "example.com"
  ],
  "include_subdomains": true,
  "allow_plus_tag": false,
  "require_ascii_email": true,
  "require_dns_mail_route": false
}
cURL (bash)
curl --request POST \
  --url 'https://api-production-9502.up.railway.app/v1/email-preflight/policy-check' \
  --header 'Authorization: Bearer ${AP_CONTROL_API_KEY}' \
  --header 'Content-Type: application/json' \
  --data '{
  "email": "buyer+trial@billing.example.com",
  "policy_name": "crm-import",
  "allowed_domains": [
    "example.com"
  ],
  "include_subdomains": true,
  "allow_plus_tag": false,
  "require_ascii_email": true,
  "require_dns_mail_route": false
}'
Representative response
{
  "status": "COMPLETED",
  "decision": "BLOCKED",
  "allowed_by_policy": false,
  "policy_name": "crm-import",
  "address": {
    "normalized": "buyer+trial@billing.example.com",
    "ascii_email": "buyer+trial@billing.example.com",
    "local_part": "buyer+trial",
    "domain_unicode": "billing.example.com",
    "domain_ascii": "billing.example.com",
    "requires_smtputf8": false,
    "display_name": null,
    "plus_tag_present": true
  },
  "dns": null,
  "evaluated_policy": {
    "allowed_domains": [
      "example.com"
    ],
    "blocked_domains": [],
    "include_subdomains": true,
    "allow_plus_tag": false,
    "require_ascii_email": true,
    "require_dns_mail_route": false,
    "allow_address_fallback": true,
    "dns_indeterminate_blocks": false,
    "include_spf": false
  },
  "findings": [
    {
      "code": "EMAIL_PLUS_TAG_NOT_ALLOWED",
      "severity": "HIGH",
      "message": "Caller policy does not allow plus-addressing syntax.",
      "evidence": {},
      "next_action": "Collect an address without a plus tag or revise authorized policy."
    }
  ],
  "ruleset_version": "EMAIL_SYNTAX_DNS_PREFLIGHT_2026_08",
  "scope": "CALLER_SUPPLIED_EMAIL_AND_DOMAIN_ONLY",
  "dns_resolver_queried": false,
  "smtp_server_contacted": false,
  "message_sent": false,
  "mailbox_exists_verified": false,
  "deliverability_verified": false,
  "ownership_verified": false,
  "consent_verified": false,
  "disposable_status_checked": false,
  "reputation_checked": false,
  "payload_stored": false,
  "next_action": "Resolve every blocking syntax, domain, and DNS finding before downstream use."
}
Conservative syntax and IDNAAddresses and public domains return explicit Unicode, ASCII, SMTPUTF8, display-name, and plus-tag evidence without provider-specific dot or tag guessing.
DNS routing, not mailbox proofMX, null MX, address fallback, NXDOMAIN, no-route, and temporary resolver failure remain distinct; DNS cannot prove a mailbox exists or will accept a message.
No SMTP, message, ownership, or consent claimThe service contacts no mail server, sends nothing, classifies no disposable provider, scores no reputation, and stores no supplied payload.

Try Email Syntax & DNS Preflight Guard with your own workflow.

Start with the workspace, inspect the typed result, then integrate with REST or the focused MCP server.