Valide o número de celular antes de salvar
O validador confere se um número de telefone está completo e bem formado: DDD existente, nono dígito no lugar, quantidade certa de dígitos — e devolve o formato internacional (+55) pronto para usar. Roda grátis no navegador, sem cadastro. Para quem coleta telefone em formulário, monta lista de WhatsApp ou importa planilha de contatos.
Executar grátis
Roda direto no seu navegador. Grátis, sem cadastro — seus dados não são enviados para lugar nenhum.
O número brasileiro tem mais pegadinha do que parece
Celular com nove dígitos, fixo com oito; DDD que a pessoa às vezes escreve e às vezes não; zero na frente, +55, parênteses, traço, espaço — o mesmo telefone chega ao seu sistema escrito de dez jeitos. E entre eles se escondem os quebrados: dígito a menos, DDD inexistente, número fixo cadastrado como celular. Sem validação, isso só aparece quando a mensagem não chega ou a ligação cai no nada.
O que a validação devolve
Além do veredito válido/inválido, a resposta traz o número normalizado no padrão internacional (+55 11 98765-4321), o tipo — celular ou fixo — e o DDD identificado. É o formato que o WhatsApp, os gateways de SMS e os CRMs esperam; salvar o telefone já normalizado evita a bagunça de ter o mesmo cliente três vezes com três escritas diferentes.
Grátis no navegador, sem enviar nada
Digite ou cole o número na caixa acima: a análise roda na sua própria tela, sem transmitir o telefone para servidor nenhum — o que importa, porque telefone é dado pessoal sob a LGPD. Use sem limite, sem cadastro, no computador ou no celular. Também valida números de outros países: cole com o código do país (+351, +1, +54) e a checagem aplica as regras locais.
Via API, no seu formulário ou na sua planilha
Para validar na entrada do sistema — cadastro, checkout, importação — a chamada de API custa US$ 0,002 e devolve o mesmo JSON: veredito, tipo e número normalizado. Um caso típico: higienizar a coluna de telefones do CRM antes de uma ação de WhatsApp, descartando o que não é celular válido em vez de pagar disparo para número morto. Sem plano nem mensalidade: você paga só as chamadas que fizer.
Casos de uso
Lista para campanha de WhatsApp
Link wa.me só funciona com número completo, com código do país. Validar e normalizar a lista antes garante que cada contato vire um link que abre de verdade.
Cadastro de delivery
Pedido com telefone errado é entregador perdido na rua. A Padaria Pão Dourado valida o celular no cadastro e liga para o cliente certo quando o pedido sai.
Deduplicação de CRM
“(11) 98765-4321”, “11987654321” e “+5511987654321” são o mesmo cliente. Normalizar tudo para um formato único revela as duplicatas na hora.
Perguntas frequentes
A validação diz de quem é o número?
Não. Ela analisa apenas o formato: não consulta cadastro, não revela titular nem endereço. É análise estrutural, não investigação.
Descobre a operadora?
Não nesta ferramenta — a estrutura do número não diz mais quem é a operadora, por causa da portabilidade. Existe uma consulta de operadora à parte no KIT, paga por uso.
Valida número fixo também?
Sim: identifica que é fixo (oito dígitos após o DDD) e valida do mesmo jeito. Útil para separar o que pode receber WhatsApp do que não pode.
Funciona com número de fora do Brasil?
Sim, desde que venha com o código do país. Sem código, a checagem assume número brasileiro e aplica as regras do +55.
O número que eu testo fica registrado?
Não — no navegador nada é enviado nem gravado. Na API, o número é processado para gerar a resposta e não é reaproveitado.
Quanto custa via API?
US$ 0,002 por número verificado, pago por uso (PayPal). Aqui na página, grátis e sem limite.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/verify/phone \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"items":["valor-1","valor-2"]}'const res = await fetch("https://api.kit.forhosting.com/verify/phone", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"items": [
"valor-1",
"valor-2"
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/verify/phone",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"items": [
"valor-1",
"valor-2"
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/verify/phone", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"items":["valor-1","valor-2"]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"items":["valor-1","valor-2"]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/verify/phone", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"items": [
"valor-1",
"valor-2"
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "verify.phone",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |