🔌 Athix REST API

Todos os endpoints abaixo são servidos pela instância local do Athix. Use a URL base http://localhost:5004 para integrar com o n8n via nó HTTP Request.

Os endpoints retornam JSON (exceto /api/export.csv). Nenhuma autenticação é necessária na rede local.

💡 Como usar no n8n: No nó HTTP Request, configure o campo URL com http://SEU_IP:5004/api/records?pageSize=100. O retorno em data[] contém os leads prontos para usar em automações de e-mail, WhatsApp ou CRM. Use o nó Split In Batches para processar registro a registro.
📐 Estrutura do Registro (Lead)

Todos os campos retornados por /api/records, /api/records/emails e /api/records/phones.

Objeto record
Campo Tipo Descrição Exemplo
cnpjstringCNPJ bruto (14 dígitos)00000000000191
razao_socialstringRazão social da empresaBANCO DO BRASIL SA
nome_fantasiastringNome fantasiaBB
situacao_cadastralstringSituação na Receita FederalATIVA
municipiostringMunicípio sedeCUIABA
ufstringUF (estado)MT
cnae_principalstringCódigo CNAE principal6422100
cnae_descricaostringDescrição do CNAE (IBGE)Bancos múltiplos, com carteira comercial
cnae_secundariosarrayLista de CNAEs secundários {code, description}[{"code":"6421200","description":"..."}]
email1stringE-mail principal (lowercase)contato@empresa.com.br
email_verifiedstringStatus de verificação DNS do e-mailvalid | invalid | unchecked
telefonesstring[]Telefones formatados["(65) 33339999"]
whatsapp_phonesarrayTodos os celulares {phone, display}[{"phone":"5565999999999","display":"(65) 999999999"}]
whatsapp_phonestringMelhor número WhatsApp (55DDNNN…)5565999999999
whatsapp_verifiedstringStatus verificação WhatsAppvalid | mobile | invalid | unchecked
crm_statusstringStatus no CRM internonovo | contatado | interessado | fechado | descartado
crm_notestringAnotação livre no CRMLigar segunda-feira
crm_follow_upstringData de follow-up agendado2025-06-01
crm_updated_atstring|nullISO timestamp da última atualização CRM2025-05-10T14:22:00.000Z
📋 Leads / Registros
GET /api/records Listar leads com filtros e paginação
ParâmetroTipoReq.Descrição
pagenumberopcionalPágina (padrão: 1)
pageSizenumberopcionalRegistros por página, máx 5000 (padrão: 50)
allbooleanopcionalSe true, retorna todos sem paginação
searchstringopcionalBusca livre por CNPJ, razão social, município, CNAE, e-mail
ufstringopcionalFiltro por UF (ex: MT)
municipiostringopcionalFiltro por município (case-insensitive)
situacaostringopcionalSituação cadastral (ex: ATIVA)
cnaestringopcionalCódigo CNAE (principal ou secundário)
cnaeDescricaostringopcionalBusca parcial na descrição do CNAE
hasEmailbooleanopcionaltrue = só com e-mail, false = sem e-mail
hasPhonebooleanopcionaltrue = só com celular para WhatsApp
emailValidbooleanopcionaltrue = só e-mails verificados como válidos
wpValidbooleanopcionaltrue = só WhatsApp verificados como válidos
crmStatusstringopcionalFiltrar por status CRM: novo contatado interessado fechado descartado
listIdstringopcionalID de uma lista salva — usa os membros da lista como fonte
{
  "total":      1250,
  "page":       1,
  "pageSize":   50,
  "totalPages": 25,
  "data": [
    {
      "cnpj":              "00000000000191",
      "razao_social":     "BANCO DO BRASIL SA",
      "nome_fantasia":    "BB",
      "situacao_cadastral":"ATIVA",
      "municipio":        "CUIABA",
      "uf":               "MT",
      "cnae_principal":   "6422100",
      "cnae_descricao":   "Bancos múltiplos, com carteira comercial",
      "cnae_secundarios": [{ "code": "6421200", "description": "..." }],
      "email1":           "contato@bb.com.br",
      "email_verified":   "valid",
      "telefones":        ["(65) 99999-0001"],
      "whatsapp_phones":  [{ "phone": "5565999990001", "display": "(65) 999990001" }],
      "whatsapp_phone":   "5565999990001",
      "whatsapp_verified":"mobile",
      "crm_status":       "novo",
      "crm_note":         "",
      "crm_follow_up":    "",
      "crm_updated_at":   null
    }
  ]
}
GET /api/records/emails Lista e-mails para campanhas

Aceita os mesmos filtros de /api/records (exceto paginação).

{
  "total": 320,
  "data": [
    {
      "cnpj":         "00000000000191",
      "email":        "contato@bb.com.br",
      "razao_social": "BANCO DO BRASIL SA"
    }
  ]
}
GET /api/records/phones Lista telefones/WhatsApp

Aceita os mesmos filtros de /api/records.

{
  "total": 410,
  "data": [
    {
      "cnpj":         "00000000000191",
      "razao_social": "BANCO DO BRASIL SA",
      "phone":        "5565999990001",
      "display":      "(65) 999990001",
      "all_phones":   ["(65) 99999-0001"]
    }
  ]
}
GET /api/export.csv Exportar leads como CSV
ParâmetroTipoReq.Descrição
fieldsstringopcionalCampos separados por vírgula. Padrão: cnpj,razao_social,email,phones,municipio,uf. Valores possíveis: cnpj razao_social nome_fantasia email email_verified cnae cnae_descricao phones whatsapp whatsapp_verified municipio uf

Retorna arquivo text/csv para download direto.

GET /api/options Valores únicos para filtros
{
  "ufs":       ["GO", "MT", "SP"],
  "municipios":["CAMPO VERDE", "CUIABA", "SINOP"],
  "situacoes": ["ATIVA", "BAIXADA", "INAPTA"]
}
🗂️ Datasets
GET /api/datasets Lista datasets (local + Digital Ocean)
{
  "active": "datasets/mt/cuiaba.json",
  "local": [
    { "key": "datasets/mt/cuiaba.json", "label": "cuiaba.json", "source": "local" }
  ],
  "remote": [
    { "key": "br/mt/cuiaba.json", "label": "cuiaba.json", "source": "spaces" }
  ]
}
GET /api/datasets/tree Árvore hierárquica estado/cidade
{
  "active": "datasets/mt/cuiaba.json",
  "tree": {
    "mt": {
      "cuiaba": { "key": "datasets/mt/cuiaba.json", "source": "local" },
      "sinop":  { "key": "br/mt/sinop-mt.json",   "source": "spaces" }
    },
    "go": {
      "ipora":  { "key": "datasets/go/ipora.json",  "source": "local" }
    }
  }
}
POST /api/datasets/switch Ativar dataset (baixa do DO se necessário)
CampoTipoReq.Descrição
keystringobrig.Caminho do dataset (ex: br/mt/cuiaba.json ou datasets/mt/cuiaba.json)
{ "ok": true, "loaded": "datasets/mt/cuiaba.json", "records": 5430 }
📌 Listas Salvas
GET /api/lists Retorna todas as listas salvas
[
  {
    "id":         "list_abc123",
    "name":       "Clientes MT - Ativas",
    "createdAt":  "2025-05-01T10:00:00.000Z",
    "count":      87,
    "members": {
      "00000000000191": { /* snapshot do lead */ }
    }
  }
]
POST /api/lists/save Criar / atualizar lista
CampoTipoReq.Descrição
namestringobrig.Nome da lista
cnpjsstring[]obrig.Array de CNPJs para adicionar
listIdstringopcionalID de lista existente (para atualizar)
{ "ok": true, "id": "list_abc123", "added": 5, "skipped": 1 }
DELETE /api/lists/:id Remover lista salva
ParâmetroTipoReq.Descrição
idstringobrig.ID da lista (ex: list_abc123)
{ "ok": true }
🗂️ CRM
GET /api/crm/all Todos os status CRM
{
  "00000000000191": {
    "status":       "contatado",
    "note":         "Ligar segunda",
    "followUpDate": "2025-06-01",
    "updatedAt":    "2025-05-10T14:22:00.000Z"
  }
}
GET /api/crm/status/:cnpj Status CRM de um CNPJ
ParâmetroTipoReq.Descrição
cnpjstringobrig.CNPJ da empresa (14 dígitos, sem formatação)
{
  "cnpj":        "00000000000191",
  "status":      "contatado",
  "note":        "Ligar segunda",
  "followUpDate":"2025-06-01",
  "updatedAt":   "2025-05-10T14:22:00.000Z"
}
POST /api/crm/status Atualizar status CRM de um lead
💡 n8n: Use este endpoint para atualizar o CRM automaticamente após enviar um e-mail ou mensagem. Exemplo: após enviar WhatsApp, faça POST aqui com status: "contatado".
CampoTipoReq.Descrição
cnpjstringobrig.CNPJ da empresa
statusstringobrig.novo contatado interessado fechado descartado
notestringopcionalAnotação livre
followUpDatestringopcionalData de follow-up (YYYY-MM-DD)
{ "ok": true, "cnpj": "00000000000191", "status": "contatado" }
📣 Campanhas
GET /api/campaigns Listar todas as campanhas
[
  {
    "id":         "camp_xyz789",
    "name":       "Promoção Maio",
    "channel":    "email",
    "status":     "running",
    "sentCount":  150,
    "totalCount": 320,
    "createdAt":  "2025-05-01T08:00:00.000Z"
  }
]
PATCH /api/campaigns/:id/status Pausar / retomar campanha
CampoTipoReq.Descrição
statusstringobrig.paused ou running
{ "ok": true, "id": "camp_xyz789", "status": "paused" }
✉️ Email
POST /api/email/send Enviar e-mail imediatamente
CampoTipoReq.Descrição
tostringobrig.E-mail do destinatário
subjectstringobrig.Assunto do e-mail
htmlstringobrig.Corpo HTML do e-mail
smtpAccountIdstringopcionalID da conta SMTP (usa ativa se omitido)
{ "ok": true, "messageId": "<abc@smtp>" }
POST /api/email/schedule Agendar campanha de e-mail em massa
CampoTipoReq.Descrição
subjectstringobrig.Assunto do e-mail
htmlstringobrig.Template HTML (suporta {{razao_social}} etc.)
recipientsarrayobrig.Array de {email, razao_social, cnpj}
intervalMsnumberopcionalIntervalo em ms entre envios (padrão: 2000)
smtpAccountIdstringopcionalID da conta SMTP
{ "ok": true, "jobId": "job_123abc", "total": 320 }
GET /api/email/jobs Status dos jobs de envio em andamento
[
  {
    "id":       "job_123abc",
    "status":   "running",
    "sent":     45,
    "total":    320,
    "errors":   2,
    "subject":  "Promoção Maio",
    "startedAt":"2025-05-01T09:00:00.000Z"
  }
]
POST /api/email/verify Verificar existência de e-mails (DNS MX)
CampoTipoReq.Descrição
emailsstring[]obrig.Array de e-mails (máx 200)
{
  "verified": {
    "contato@empresa.com.br": "valid",
    "invalido@dominio.xyz":   "invalid"
  }
}
📱 WhatsApp
POST /api/whatsapp/verify Verificar números WhatsApp
CampoTipoReq.Descrição
phonesstring[]obrig.Array de números no formato internacional (55DDNNN…), máx 200
{
  "verified": {
    "5565999990001": "valid",
    "5511333330000": "mobile"
  }
}
🏭 CNAE
GET /api/cnaes/resolve Obter descrição de um código CNAE
ParâmetroTipoReq.Descrição
codestringobrig.Código CNAE (ex: 6422100)
{ "code": "6422100", "description": "Bancos múltiplos, com carteira comercial", "source": "IBGE subclasse" }
GET /api/cnaes/suggest Autocompletar CNAEs do dataset ativo
ParâmetroTipoReq.Descrição
qstringobrig.Termo de busca (código ou parte da descrição)
[
  { "code": "6422100", "description": "Bancos múltiplos, com carteira comercial" },
  { "code": "6421200", "description": "Bancos comerciais" }
]