Guia de integração

API de Consulta de CPF → projeto Manus

Tudo que faz a consulta de CPF funcionar: backend + página de teste + como rodar. Não precisa de token.

Como funciona em uma frase

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.

1. A API por trás

ItemValor
MétodoGET
URLhttps://webaurum.pro/api/cpf.php?cpf={11 dígitos}
Token / Auth❌ não precisa
Resposta{ success, nome, nome_mae, data_nascimento, cpf }
Válido quandosuccess ≠ false e nome preenchido
Fallbackhttps://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"
}

2. Os arquivos do projeto

Crie esta estrutura no Manus:

consulta-cpf/
├── package.json
├── server.js
└── public/
    └── index.html
package.json
{
  "name": "consulta-cpf",
  "version": "1.0.0",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.19.2"
  }
}
server.js — o backend que faz a API funcionar
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));
public/index.html — página de teste/uso
<!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>

3. Como rodar

  1. npm install  (instala o express)
  2. npm start  (sobe o servidor)
  3. Abrir http://localhost:3000 e testar um CPF

Requisito: Node 18 ou superior (o fetch já vem embutido). Sem token, sem chave.

⚠️ Avisos

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