One inbox, one key

Two strings can point at one inbox. [email protected] and [email protected] are a common example. Key a contact table by the raw strings and you’ll create duplicate records, split conversation history, and perhaps send the same outreach twice.

match-key-email accepts one email address and returns a value built for grouping. It lowercases the address and removes its +tag suffix. For gmail.com and googlemail.com, it also removes dots from the local part and maps both domains to gmail.com.

The endpoint costs $0.005 USDC per call through x402 on Base mainnet. Its response includes the original input, normalized address, match key, domain, and a basic syntax result.

Call the endpoint

Send the address in a JSON body:

POST /match-key-email HTTP/1.1
Host: api.agentutility.ai
Content-Type: application/json

{
  "email": "[email protected]"
}

After payment, the response is:

{
  "input": "[email protected]",
  "normalized": "[email protected]",
  "match_key": "[email protected]",
  "is_valid_syntax": true,
  "domain": "gmail.com"
}

Call the route again with [email protected] and you’ll receive the same match_key. An agent can look up that key before inserting another contact.

Dots are preserved outside Gmail. For example, [email protected] becomes [email protected]. The first + and everything after it are removed for every domain.

Keep the source address

Put match_key in a separate indexed column. Keep the submitted address as the value used for sending mail.

Why retain both? Plus addressing isn’t handled alike by every mail system, and a shared inbox such as [email protected] can belong to several people. A key collision marks records for linking or review. Evidence from the name, company, or account history can decide whether they should merge.

For bulk imports, group rows by match_key and compare records inside each group. An invalid is_valid_syntax result can stop the row before it reaches your CRM. A valid result means the string has email-like structure. It doesn’t establish that the domain accepts mail.

Put verification after matching

Add email-deliverability-check before an action that depends on mail arriving, such as sending paid outreach or issuing an invitation. Pass the original address. That endpoint checks MX records and returns a 0–100 score, risk level, disposable and role-account flags, plus SPF, DMARC, and DKIM details.

With an x402-aware POST helper, the branch can stay narrow:

const keyed = await paidPost(
  "https://api.agentutility.ai/match-key-email",
  { email: rawEmail }
);

const candidates = await contacts.findByEmailKey(keyed.match_key);

if (willSendEmail) {
  const delivery = await paidPost(
    "https://api.agentutility.ai/email-deliverability-check",
    { email: rawEmail }
  );

  if (!delivery.can_receive_mail || delivery.risk === "high") {
    await queueForReview({ rawEmail, keyed, delivery });
  }
}

Each call costs $0.005 USDC, so this paired path costs $0.01. A cleanup agent that only groups imported records can stop after match-key-email and avoid the second payment.

email-deliverability-check reports verification_level: "domain_dns_no_mailbox_probe". For account recovery or any flow that grants access, send a one-time code or signed link and wait for redemption. DNS evidence can’t prove that the recipient controls [email protected].