Tudo que faz a consulta de CPF funcionar: backend + página de teste + como rodar. Não precisa de token.
O usuário digita o CPF → o seu backend chama a API webaurum.pro/api/cpf.php → devolve nome, nome da mãe e data de nascimento, que a página preenche na tela.
| Item | Valor |
|---|---|
| Método | GET |
| URL | https://webaurum.pro/api/cpf.php?cpf={11 dígitos} |
| Token / Auth | ❌ não precisa |
| Resposta | { success, nome, nome_mae, data_nascimento, cpf } |
| Válido quando | success ≠ false e nome preenchido |
| Fallback | https://testec-production.up.railway.app/?cpf= (reserva; hoje fora do ar) |
Exemplo de resposta real:
{
"success": true,
"nome": "JEAN CARLOS MONTEIRO",
"nome_mae": "EVA LUIZA RAMOS",
"data_nascimento": "02/08/1984",
"cpf": "11144477735"
}
Crie esta estrutura no Manus:
consulta-cpf/
├── package.json
├── server.js
└── public/
└── index.html
{
"name": "consulta-cpf",
"version": "1.0.0",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.19.2"
}
}
const express = require('express');
const path = require('path');
const app = express();
const PORT = process.env.PORT || 3000;
// Fonte dos dados (pode trocar por env sem mexer no codigo)
const PRIMARY = process.env.CPF_LOOKUP_URL || 'https://webaurum.pro/api/cpf.php?cpf=';
const FALLBACK = process.env.CPF_FALLBACK_URL || 'https://testec-production.up.railway.app/?cpf=';
app.use(express.static(path.join(__dirname, 'public')));
// Pega o primeiro campo nao-vazio dentre varias chaves possiveis
function pick(obj, keys) {
if (!obj) return '';
for (const k of keys) {
const v = obj[k];
if (v != null && String(v).trim() !== '') return String(v).trim();
}
return '';
}
// Consulta um upstream e devolve {nome, nasc, mae} ou null
async function lookup(base, cpf) {
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 8000);
try {
const r = await fetch(base + encodeURIComponent(cpf), {
method: 'GET',
signal: controller.signal,
headers: { 'Accept': 'application/json', 'User-Agent': 'Mozilla/5.0' }
});
let data = {};
try { data = await r.json(); } catch (_) { data = {}; }
if (!r.ok || !data || data.success === false) return null;
const nome = pick(data, ['nome', 'NOME', 'name', 'Nome']);
const nasc = pick(data, ['data_nascimento', 'nascimento', 'NASC', 'DATA_NASCIMENTO', 'birthDate']);
const mae = pick(data, ['nome_mae', 'NOME_MAE', 'mae', 'nomeMae']);
if (!nome) return null;
return { nome, nasc, mae };
} catch (e) {
return null;
} finally {
clearTimeout(timeout);
}
}
// Endpoint que o front chama
app.get('/api/consulta-cpf', async (req, res) => {
const cpf = String((req.query && req.query.cpf) || '').replace(/\D/g, '');
if (cpf.length !== 11) {
return res.status(400).json({ success: false, error: 'CPF invalido (precisa de 11 digitos)' });
}
let r = await lookup(PRIMARY, cpf);
if (!r && FALLBACK) r = await lookup(FALLBACK, cpf);
if (!r) {
return res.status(502).json({ success: false, error: 'Nao foi possivel consultar o CPF agora' });
}
return res.json({
success: true,
nome: r.nome,
nome_mae: r.mae,
data_nascimento: r.nasc,
cpf
});
});
app.listen(PORT, () => console.log('Rodando em http://localhost:' + PORT));
<!doctype html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Consulta CPF</title>
<style>
body { font-family: system-ui, sans-serif; max-width: 480px; margin: 40px auto; padding: 0 16px; }
input, button { font-size: 16px; padding: 12px; width: 100%; box-sizing: border-box; border-radius: 8px; border: 1px solid #ccc; }
button { background: #ee4d2d; color: #fff; border: none; margin-top: 10px; cursor: pointer; }
button:disabled { opacity: .5; cursor: default; }
.res { margin-top: 20px; padding: 16px; border-radius: 8px; background: #f5f5f5; display: none; }
.res.show { display: block; }
.erro { color: #c00; }
.campo { margin: 6px 0; }
.campo b { display: inline-block; width: 150px; }
</style>
</head>
<body>
<h2>Consulta de CPF</h2>
<input id="cpf" inputmode="numeric" placeholder="Digite o CPF (so numeros)" maxlength="14">
<button id="btn">Consultar</button>
<div id="res" class="res"></div>
<script>
const inp = document.getElementById('cpf');
const btn = document.getElementById('btn');
const res = document.getElementById('res');
btn.addEventListener('click', async () => {
const cpf = inp.value.replace(/\D/g, '');
if (cpf.length !== 11) {
res.className = 'res show';
res.innerHTML = '<span class="erro">Digite um CPF com 11 digitos.</span>';
return;
}
btn.disabled = true;
btn.textContent = 'Consultando...';
try {
const r = await fetch('/api/consulta-cpf?cpf=' + cpf);
const data = await r.json();
res.className = 'res show';
if (data.success) {
res.innerHTML =
'<div class="campo"><b>Nome:</b> ' + data.nome + '</div>' +
'<div class="campo"><b>Nome da mae:</b> ' + (data.nome_mae || '—') + '</div>' +
'<div class="campo"><b>Nascimento:</b> ' + (data.data_nascimento || '—') + '</div>';
} else {
res.innerHTML = '<span class="erro">' + (data.error || 'CPF nao encontrado') + '</span>';
}
} catch (e) {
res.className = 'res show';
res.innerHTML = '<span class="erro">Erro de conexao. Tente de novo.</span>';
} finally {
btn.disabled = false;
btn.textContent = 'Consultar';
}
});
</script>
</body>
</html>
npm install (instala o express)npm start (sobe o servidor)http://localhost:3000 e testar um CPFRequisito: Node 18 ou superior (o fetch já vem embutido). Sem token, sem chave.
Dependência de terceiro: a API webaurum.pro é servidor de outra pessoa. Se derrubarem ou bloquearem, para de responder.
Independência total: a fonte real por baixo é o data-api.click. Com um token próprio lá, dá pra apontar direto (trocando a env CPF_LOOKUP_URL) e não depender de ninguém.
Gerado para uso no projeto Manus · consulta de CPF