Skip to main content

📋 Documentação da API - Detalhamento de Lead Individual

Endpoint

POST /bifrost/funil/details

Descrição

Retorna o detalhamento completo de um único lead específico através do seu longId. Esta rota consolida informações de diversas fontes (funil PF, funil PJ, balcão, formulários, origens personalizadas, etc.) e retorna dados completos incluindo beneficiários, anexos, histórico de movimentação, cancelamentos e informações do colaborador responsável.


🔐 Autenticação

Esta rota requer autenticação via token JWT api-key.

Headers obrigatórios:

api-key: <sua-api-key>

🌐 Hostnames

DEV:

  • VPN: 100.113.139.94:3001
  • PUBLIC: 136.116.58.209:3001

URL Completa de Exemplo (DEV):

http://136.116.58.209:3001/bifrost/funil/details

📥 Parâmetros do Body (JSON)

ParâmetroTipoObrigatórioDescriçãoExemplo
longIdstringSimIdentificador longo único do lead (UUID)29062119-f318-11f0-a29c-02420a4d0002
sourcestringSimOrigem do leadcustom-funil, funil-pf, funil-pj, funil-balcao, etc.

Valores válidos para source:

  • custom-funil - Origem Personalizada

📤 Resposta de Sucesso

Status Code: 200 OK

Estrutura da Resposta

{
"message": {
"id": 182,
"source": "custom-funil",
"blocked": 0,
"isFollowUp": false,
"novu_hash": "6984d56d55d71cefcacdd25e",
"name": "andre",
"mail": "[email protected]",
"saledLifes": 0,
"saledPlan": "-",
"customSourceName": "Superlead",
"slugOrigin": "superlead",
"customSourceSlug": "superlead",
"phone": "62998315092",
"pfOrPj": "PJ",
"long_id": "4d8874e3-e8a7-4f9b-89d6-35db04116b8c",
"sprintId": 1,
"sprintName": "Sprint Padrão",
"shortLongId": "4D8874",
"status_risk_flow": 0,
"size": "-",
"propostaConsolidada": 0,
"cpf": "70255710160",
"cnpj": "44.148.296/0001-68",
"qttPersons": "1",
"interestPlan": "-",
"timeContact": "-",
"prefContact": "-",
"temperature": 1,
"date_created": "05/02/2026",
"date": "05/02/2026",
"time": "",
"files": "-",
"ans_plano_unimed": "-",
"email_valido": null,
"cliente_unimed": "0",
"etapa_kanban": "0",
"gestor_user_Id": null,
"attributedToPersonIn": false,
"motiveCancelling": [],
"desistenciasReaberturasProposta": [],
"beneficiarios": [],
"anexos": [],
"repeated": [
{
"id": 182,
"source": "custom-funil",
"date_created": "05/02/2026",
"gestor_user_Id": null,
"mail": "[email protected]",
"etapa_kanban": "0",
"motiveCancelling": [],
"movimentationLogs": []
}
]
}
}

📊 Campos Detalhados da Resposta

Campos Principais do Lead

CampoTipoDescrição
idnumberID único do lead no banco de dados
sourcestringOrigem do lead (funil-pf, funil-pj, custom-funil, etc.)
blockednumberStatus de bloqueio (0 = não bloqueado, 1 = bloqueado)
isFollowUpbooleanIndica se o lead está em follow-up
novu_hashstring | nullHash de identificação do Novu (notificações)
namestringNome completo do lead
mailstringE-mail do lead
saledLifesnumberQuantidade de vidas vendidas para este lead
saledPlanstringNome do plano vendido (ou "-" se não houver)
customSourceNamestringNome da origem personalizada
slugOriginstringSlug da origem personalizada
customSourceSlugstringSlug da origem (duplicado para compatibilidade)
phonestringTelefone do lead (apenas números)
pfOrPjstringTipo de pessoa ("PF" = Pessoa Física, "PJ" = Pessoa Jurídica)
long_idstringIdentificador longo único do lead (UUID)
sprintIdnumber | nullID da sprint associada ao lead
sprintNamestringNome da sprint (ou "-" se não houver)
shortLongIdstringVersão curta do long_id (8 primeiros caracteres)
status_risk_flownumberStatus do fluxo de risco (0 = sem risco)
propostaConsolidadanumberIndica se há proposta consolidada (0 = não, 1 = sim)
cpfstringCPF do lead ("-" se não informado)
cnpjstringCNPJ do lead ("-" se não informado)
qttPersonsstringQuantidade de pessoas no lead
interestPlanstringPlano de interesse do lead
timeContactstringHorário preferido para contato
prefContactstringPreferência de contato (whatsapp, telefone, email, etc.)
date_createdstringData de criação do lead (formato DD/MM/YYYY)
datestringData da última atualização (formato DD/MM/YYYY)
timestringHorário adicional (pode estar vazio)
email_validostringValidação de e-mail ("0" = inválido, "1" = válido)
cliente_unimedstringCliente Unimed ("0" = não, "1" = sim)
etapa_kanbanstringID da etapa atual no kanban
gestor_user_Idnumber | nullID do usuário gestor/corretor responsável
attributedToPersonInstring | booleanData de atribuição ao corretor (DD/MM/YYYY) ou false
proposeNumberstring | nullNúmero da proposta associada (se houver)

Campos do Colaborador Responsável

CampoTipoDescrição
collab_responsible_team_namestringNome da equipe do colaborador responsável
collab_responsible_namestringNome do colaborador responsável pelo lead
collab_responsible_colorstringCor hexadecimal do ranking do colaborador

Arrays Relacionados

motiveCancelling (Array)

Lista de motivos de cancelamento/desistência do lead.

[
{
"id": 123,
"id_longo_lead": "29062119-f318-11f0-a29c-02420a4d0002",
"id_tipo_motivo": 1,
"titulo_tipo_motivo_cancelamento": "Cliente desistiu",
"gestor_user_Id": 19,
"collabResponsibleCancellingName": "Paloma Soares de Souza",
"numero_proposta": null,
"criado_em": "2026-01-20T14:30:00.000Z",
"typeMotive": "lead"
}
]

desistenciasReaberturasProposta (Array)

Lista de motivos de cancelamento/reabertura da proposta associada ao lead.

[
{
"id": 124,
"id_longo_lead": "29062119-f318-11f0-a29c-02420a4d0002",
"id_tipo_motivo": 3,
"titulo_tipo_motivo_cancelamento": "Documentação incompleta",
"gestor_user_Id": 19,
"collabResponsibleCancellingName": "Paloma Soares de Souza",
"numero_proposta": "2026010001",
"criado_em": "2026-01-22T10:15:00.000Z",
"typeMotive": "propose"
}
]

beneficiarios (Array)

Lista de beneficiários da proposta (colaboradores ou dependentes).

[
{
"nome": "Maria Silva Santos",
"cpf": "12345678900",
"tipoVenda": "titular",
"dataNascimento": "1985-05-15"
},
{
"nome": "João Silva Santos",
"cpf": "98765432100",
"tipoVenda": "dependente",
"dataNascimento": "2010-08-20"
}
]

anexos (Array)

Lista de anexos/documentos do lead (apenas com status_arquivo = 1).

[
{
"id": 456,
"id_longo_lead": "29062119-f318-11f0-a29c-02420a4d0002",
"nome_arquivo": "documento_identidade.pdf",
"url_arquivo": "https://storage.example.com/anexos/documento_identidade.pdf",
"tipo_arquivo": "RG",
"status_arquivo": 1,
"criado_em": "2026-01-17T09:00:00.000Z"
}
]

repeated (Array)

Histórico de registros e movimentações do lead (pode conter múltiplas entradas se o lead for repetido).

[
{
"id": 20626,
"source": "custom-funil",
"date_created": "16/01/2026",
"gestor_user_Id": 19,
"mail": "[email protected]",
"etapa_kanban": "5",
"motiveCancelling": [],
"movimentationLogs": [
{
"id": 789,
"id_longo_lead": "29062119-f318-11f0-a29c-02420a4d0002",
"etapa_kanban_anterior": "3",
"etapa_kanban_nova": "5",
"gestor_user_Id": 19,
"collabResponsibleLead": "Paloma Soares de Souza",
"atualizado_em": "2026-01-28T17:29:47.000Z"
}
]
}
]

Campos do movimentationLogs:

  • id: ID do log de movimentação
  • id_longo_lead: Long ID do lead
  • etapa_kanban_anterior: Etapa anterior no kanban
  • etapa_kanban_nova: Nova etapa no kanban
  • gestor_user_Id: ID do colaborador que movimentou
  • collabResponsibleLead: Nome do colaborador responsável pela movimentação
  • atualizado_em: Data/hora da movimentação

❌ Respostas de Erro

400 - Bad Request (Parâmetros Inválidos)

Retornado quando parâmetros obrigatórios não são fornecidos.

{
"message": "erro: parâmetros não atendem a requisição, falta longId ou source"
}

400 - Bad Request (Lead Não Encontrado)

Retornado quando o lead com o longId informado não existe.

{
"message": "lead não encontrado longId->29062119-f318-11f0-a29c-02420a4d0002"
}

500 - Internal Server Error

Retornado em caso de erro interno não tratado.

{
"error": "Internal server error",
"message": "Descrição do erro"
}

📊 Exemplos de Uso

Exemplo 1: Buscar detalhes de um lead por longId

Request:

curl -X POST "http://136.116.58.209:3001/bifrost/funil/details" \
-H "Authorization: Bearer seu-token-jwt" \
-H "api-key: sua-api-key" \
-H "Content-Type: application/json" \
-d '{
"longId": "4d8874e3-e8a7-4f9b-89d6-35db04116b8c",
"source": "custom-funil"
}'

Response:

{
"message": {
"id": 182,
"source": "custom-funil",
"blocked": 0,
"name": "andre",
"mail": "[email protected]",
"phone": "62998315092",
"long_id": "4d8874e3-e8a7-4f9b-89d6-35db04116b8c",
"shortLongId": "4D8874",
"sprintId": 1,
"sprintName": "Sprint Padrão",
"cpf": "70255710160",
"cnpj": "44.148.296/0001-68",
"etapa_kanban": "0",
"gestor_user_Id": null,
"customSourceName": "Superlead",
"beneficiarios": [],
"anexos": [],
"repeated": [...]
}
}

Exemplo 2: Buscar lead do funil PF

Request:

curl -X POST "http://136.116.58.209:3001/bifrost/funil/details" \
-H "Authorization: Bearer seu-token-jwt" \
-H "api-key: sua-api-key" \
-H "Content-Type: application/json" \
-d '{
"longId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"source": "funil-pf",
"leadId": 12345
}'

Exemplo 3: Buscar lead do balcão

Request:

curl -X POST "http://136.116.58.209:3001/bifrost/funil/details" \
-H "Authorization: Bearer seu-token-jwt" \
-H "api-key: sua-api-key" \
-H "Content-Type: application/json" \
-d '{
"longId": "xyz123-def456-ghi789",
"source": "funil-balcao"
}'

🔄 Fluxo de Processamento

  1. Validação de Parâmetros: Verifica se longId e source foram fornecidos
  2. Busca Unificada: Consulta o lead em todas as origens possíveis (funil PF, PJ, balcão, custom, etc.)
  3. Verificação de Bloqueio: Checa se o email do lead está na blocklist
  4. Enriquecimento de Dados:
    • Busca informações do colaborador responsável
    • Busca logs de movimentação
    • Busca cancelamentos e reaberturas
    • Busca anexos do lead
    • Busca sprint associada
    • Busca vidas vendidas
    • Busca proposta associada e beneficiários
  5. Consolidação: Monta o objeto final com todas as informações relacionadas
  6. Resposta: Retorna o objeto completo do lead

🔐 Segurança

  • ✅ Autenticação JWT obrigatória via middleware verificaToken
  • ✅ Validação de entrada de dados

⚡ Performance

Otimizações Implementadas

  • Busca paralela de dados relacionados (usuários, logs, anexos, etc.)
  • Cache de dados de usuários para reduzir chamadas à API do Gestor
  • Filtros em memória para evitar múltiplas queries ao banco

Tempo Médio de Resposta

  • Lead simples: 300-500ms
  • Lead com proposta e beneficiários: 500-800ms
  • Lead complexo com múltiplos anexos: 800-1200ms

🔧 Middlewares Aplicados

  1. verificaToken: Validação de token JWT para autenticação

📝 Notas Importantes

  1. Multi-tenant: A rota identifica automaticamente o tenant através da configuração da requisição
  2. Source Externo: Origens com sufixo (externo) são automaticamente tratadas e o sufixo é removido
  3. Beneficiários: Só são retornados se houver proposta associada ao CPF do lead e o tipo de pessoa corresponder
  4. Anexos: Apenas anexos com status_arquivo = 1 são retornados
  5. Shortcode: O shortLongId é gerado automaticamente a partir dos primeiros 8 caracteres do long_id
  6. Data de Atribuição: É calculada automaticamente através dos logs de movimentação quando o lead é atribuído a um colaborador

🆕 Versão Refatorada

Existe também uma versão refatorada deste endpoint:

POST /bifrost/funil/details/refatored

Esta versão utiliza a função quickLeadDetailsRefactored que oferece:

  • Melhor performance com queries otimizadas
  • Código mais limpo e manutenível
  • Busca paralela de dados relacionados

Consulte a documentação específica para detalhes desta versão.


📌 Versão da API

Versão: 1.0
Última Atualização: Fevereiro de 2026
Mantido por: Equipe de Desenvolvimento UNI API