Verify
Diz se um endereço de e-mail existe e recebe mensagens. Um crédito por resultado conclusivo; inconclusivos não são cobrados.
Verificar um e-mail
POST/v1/verify
Síncrono: a resposta já traz o resultado, normalmente em poucos segundos.
| Campo | Tipo | Descrição |
|---|---|---|
email | texto | Obrigatório. O endereço a verificar. |
curl -X POST https://gateway.autentify.com.br/v1/verify \
-H "Authorization: Bearer $AUTENTIFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"ana@empresa.com.br"}'{
"id": "vr_5f2c9a81d04e7b36a1c8e2f4",
"email": "ana@empresa.com.br",
"domain": "empresa.com.br",
"verified_at": "2026-10-03T14:02:11.482913Z",
"state": "deliverable",
"reason": "accepted_email",
"attributes": {
"free": false,
"role": false
}
}Resultado
| Campo | Descrição |
|---|---|
id | Identificador da verificação. |
email | O endereço verificado. O domínio vem em minúsculas; a parte antes do @ fica como foi enviada. |
domain | Domínio do endereço. |
verified_at | Data e hora da verificação, em UTC (ISO 8601). |
state | O estado do endereço (tabela abaixo). |
reason | Motivo do estado. Só aparece quando há fundamento. |
attributes | Características do endereço. Só aparecem as conhecidas. |
Estados
| state | Significado | O que fazer | Cobrado |
|---|---|---|---|
deliverable | A caixa existe e aceita mensagens. | Pode enviar. | Sim |
undeliverable | A caixa ou o domínio não existem, ou o domínio não recebe e-mail. | Remova da lista. | Sim |
risky | Existe risco: o domínio aceita qualquer endereço ou o e-mail é temporário. | Envie com cautela ou recuse no cadastro. | Sim |
unknown | Não foi possível concluir agora. | Tente mais tarde. | Não |
Motivos
| reason | state | Significado |
|---|---|---|
accepted_email | deliverable | O servidor confirmou a caixa. |
mailbox_not_found | undeliverable | O servidor informou que a caixa não existe. |
domain_not_found | undeliverable | O domínio não existe. |
no_mx | undeliverable | O domínio existe, mas não recebe e-mail. |
accept_all | risky | O domínio aceita qualquer endereço, então não dá para confirmar a caixa. |
disposable_email | risky | E-mail temporário ou descartável. |
Um undeliverable pode vir sem reason. Motivos novos podem ser acrescentados: trate um código desconhecido sem falhar e decida pelo state.
Atributos
| Atributo | Significado |
|---|---|
free | O domínio é de um provedor gratuito (Gmail, Outlook, UOL...). false não prova que é e-mail de empresa. |
role | Endereço de função, como contato@ ou financeiro@. false não prova que é de uma pessoa. |
accept_all | O domínio aceita qualquer endereço. Só aparece quando verdadeiro. |
disposable | E-mail temporário. Só aparece quando verdadeiro. |
Erros deste módulo
Além dos erros comuns: 422 invalid_email quando o endereço não tem formato de e-mail (nada é cobrado). Falhas temporárias chegam como 503 provider_error, 503 service_unavailable ou 503 provider_timeout, sempre sem cobrança.
Lotes
Para listas, crie um lote de até 5.000 entradas. O lote é processado em segundo plano: você recebe o identificador na hora e consulta o andamento.
1. Criar o lote
POST/v1/verify/batches
| Campo | Tipo | Descrição |
|---|---|---|
emails | lista de textos | Obrigatório. De 1 a 5.000 endereços. |
curl -X POST https://gateway.autentify.com.br/v1/verify/batches \
-H "Authorization: Bearer $AUTENTIFY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"emails":["ana@empresa.com.br","sem-arroba","joao@gmail.com","joao@gmail.com"]}'{
"id": "vb_0b7d41c9e83a52f6d1907ce4",
"status": "queued",
"created_at": "2026-10-03T14:05:40.120394Z",
"finished_at": null,
"counts": {
"entries": 4,
"unique": 2,
"invalid": 1,
"duplicates": 1,
"processed": 0,
"failed": 0
},
"progress": 0,
"credits": {
"reserved": 2,
"charged": 0
}
}- Endereços repetidos são verificados e cobrados uma vez só.
- Entradas sem formato de e-mail não são verificadas nem cobradas.
- A criação reserva 1 crédito por endereço único (
credits.reserved). No fim, só os resultados conclusivos são cobrados (credits.charged) e o restante volta para o saldo. - Sem saldo para o lote inteiro, a resposta é
402 insufficient_creditse nada é criado. - Envie
Idempotency-Keypara não criar o mesmo lote duas vezes.
2. Acompanhar
GET/v1/verify/batches/{id}
Devolve o mesmo objeto da criação, atualizado. Consulte a cada 5 a 10 segundos até o estado final.
| status | Significado |
|---|---|
queued | Na fila. |
processing | Em processamento. progress vai de 0 a 100. |
completed | Concluído. Todos os endereços têm resultado. |
completed_with_errors | Concluído, mas alguns endereços falharam (counts.failed). Eles não foram cobrados. |
failed | O lote parou por uma falha interna. Fale com o suporte. |
| counts | Significado |
|---|---|
entries | Entradas enviadas. |
unique | Endereços únicos válidos (o que é verificado). |
invalid | Entradas sem formato de e-mail. |
duplicates | Entradas repetidas. |
processed | Endereços únicos já com resultado. |
failed | Endereços únicos que falharam. |
3. Buscar os resultados
GET/v1/verify/batches/{id}/results?cursor=0&limit=500
Uma linha por entrada enviada, na mesma ordem. Pode ser consultado durante o processamento. limit vai de 1 a 1.000 (padrão 500). Para a próxima página, envie em cursor o valor de next_cursor; quando ele vier null, acabou.
{
"results": [
{
"position": 0,
"input": "ana@empresa.com.br",
"result": {
"id": "vr_5f2c9a81d04e7b36a1c8e2f4",
"email": "ana@empresa.com.br",
"domain": "empresa.com.br",
"verified_at": "2026-10-03T14:02:11.482913Z",
"state": "deliverable",
"reason": "accepted_email",
"attributes": {
"free": false,
"role": false
}
}
},
{
"position": 1,
"input": "sem-arroba",
"error": {
"code": "invalid_email",
"message": "Endereço de e-mail inválido."
}
},
{
"position": 2,
"input": "joao@gmail.com",
"status": "pending"
}
],
"next_cursor": 3
}Cada linha traz a posição, o texto enviado e uma destas três coisas:
result: o resultado, no mesmo formato da verificação unitária. Entradas repetidas trazem o mesmo resultado.error: a entrada era inválida (invalid_email) ou a verificação falhou. Sem cobrança.status: "pending": ainda não processada.
