Validação de e-mails em loteBETAcore beta

Valide a sintaxe RFC, normalize (lowercase, trim) e detecte typos de domínio. Até 1.000 e-mails por request.

Contrato estável; mudanças breaking apenas com deprecation prévio.

POST/v1/validate/emails
Visão geral

Validate a batch of email addresses. Each item carries an `id` and a `value` — no country is needed. The API checks RFC syntax, normalizes the address (lowercase domain, trim) and detects common domain typos against a curated list of providers (gmial.com → gmail.com). Each result carries `valid`, the `normalized` address and an `error` message when invalid. Up to 1000 emails per request. Domain-level checks are part of email validation: there is no separate domain endpoint.

URL base: https://api.normadata.io

Header de autenticação: X-API-Key: nd-...

Corpo da requisição

Corpo da requisição

CampoTipoObrigatórioDescrição
itemsarraysimArray of items to validate (1–1000). Each item is the object described below.
items[].idstringnãoClient-provided correlation id, echoed back verbatim in the matching result.
items[].valuestringsimEmail address to validate. Whitespace is trimmed and the domain is lowercased.
Exemplo de requisição

Exemplo de requisição

cURL
curl -X POST https://api.normadata.io/v1/validate/emails \
  -H "X-API-Key: nd_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -d '{"items":[
    {"id":"1","value":"  ROGER@Normadata.IO "},
    {"id":"2","value":"juan@gmial.com"}
  ]}'
Go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
	"os"
)

type EmailItem struct {
	ID    string `json:"id"`
	Value string `json:"value"`
}

type EmailResult struct {
	ID         string `json:"id"`
	Value      string `json:"value"`
	Valid      bool   `json:"valid"`
	Normalized string `json:"normalized"`
	Error      string `json:"error"`
}

type EmailResponse struct {
	Results []EmailResult `json:"results"`
}

func main() {
	body, _ := json.Marshal(map[string][]EmailItem{
		"items": {
			{ID: "1", Value: "  ROGER@Normadata.IO "},
			{ID: "2", Value: "juan@gmial.com"},
		},
	})
	req, _ := http.NewRequest("POST", "https://api.normadata.io/v1/validate/emails", bytes.NewReader(body))
	req.Header.Set("X-API-Key", os.Getenv("NORMADATA_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()

	var out EmailResponse
	json.NewDecoder(res.Body).Decode(&out)
	for _, r := range out.Results {
		fmt.Println(r.ID, r.Valid, r.Normalized)
	}
}
Exemplo de resposta

Exemplo de resposta 200

JSON
{
  "results": [
    {
      "id": "1",
      "value": "  ROGER@Normadata.IO ",
      "valid": true,
      "normalized": "roger@normadata.io"
    },
    {
      "id": "2",
      "value": "juan@gmial.com",
      "valid": false,
      "error": "typo in domain: did you mean gmail.com?"
    }
  ]
}
Erros comuns

Erros comuns

Códigos de erro que você pode encontrar ao chamar este endpoint. O envelope completo está documentado na referência principal.

Código
INVALID_EMAIL
MISSING_VALUE
empty_batch
batch_too_large
quota_exceeded

Ver todos os códigos de erro

Notas

Notas

Validates that the address is well-formed and the domain looks right — it does not verify the inbox exists and runs no SMTP lookup. The envelope is shared by every endpoint: POST `{items:[…]}` (1–1000) → `{results:[…]}` correlated by `id`.

Acesso

Use este endpoint em acesso antecipado

O acesso à Normadata é provisionado manualmente. Solicite acesso com seu caso de uso e provisionamos a API key para sua conta.

Solicitar acesso