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_CONFLICTPOST /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 --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
}'{
"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."
}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.