API Parceiro V1
Interface REST para sistemas integrados gerenciarem a operação comercial — usuários, hierarquia, parceiros, produção, agenda e prospecções — diretamente no Painel Comercial.
Produto
A API Parceiro V1 expõe todos os recursos do Painel Comercial como endpoints REST com autenticação JWT e controle hierárquico de acesso. Há um único produto integrado:
Como usar a API
Siga a sequência abaixo para integrar corretamente:
1. Obtenha o token de acesso
Toda requisição à API requer autenticação JWT. Antes de qualquer chamada, faça login em POST /auth/login para obter o token. Envie-o em todas as requisições subsequentes via cabeçalho Authorization: Bearer <token> ou cookie app_token.
2. Entenda a hierarquia comercial
A API aplica controle de escopo automático em todos os endpoints: cada usuário só enxerga e modifica dados dentro da sua hierarquia. Os níveis são:
| Role | Escopo |
|---|---|
admin | Acesso total — todos os dados |
superintendente | Dados da sua superintendência |
regional | Dados da sua regional |
gestor_comercial | Apenas os próprios dados |
3. Fluxo sugerido para ingestão de dados
- Usuários —
POST /gc/usuarios/json— cria gestores e define a hierarquia - Estrutura Comercial —
POST /gc/estrutura/json— cria regionais e superintendências - Parceiros —
POST /parceiros/json— vincula parceiros às estruturas - Produção —
POST /producao/json— insere histórico de produção mensal
Use o parâmetro ?replace=true nos endpoints bulk para substituição completa da base. Sem ele, os registros são atualizados via upsert (inserção ou atualização pelo identificador único).
Base URL
https://seu-dominio.com/api
Todos os endpoints retornam Content-Type: application/json. Requisições com corpo devem usar Content-Type: application/json, exceto uploads que usam multipart/form-data.
Autenticação
A API usa JWT (JSON Web Token). Você obtém o token via login e o envia em todas as requisições subsequentes.
1. Obter o token
Faça um POST para /auth/login com suas credenciais. O token é retornado no corpo da resposta e definido como cookie HttpOnly (app_token).
curl -X POST https://seu-dominio.com/auth/login \ -H "Content-Type: application/json" \ -d '{ "login": "seu_login", "senha": "sua_senha" }'
{
"ok": true,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"login": "seu_login",
"nome": "Seu Nome",
"role": "admin"
}
2. Enviar o token
Via header Authorization (recomendado para APIs)
curl https://seu-dominio.com/api/usuarios \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
Via cookie (para browsers)
Se você usou -c cookies.txt no curl de login, o cookie app_token é enviado automaticamente. Em browsers, o cookie HttpOnly é gerenciado automaticamente após o login.
Validade do token
O token expira em 24 horas por padrão (configurável via JWT_HOURS). Após expiração, repita o login. Requisições com token expirado retornam 401.
Níveis de acesso
| Role | O que pode fazer |
|---|---|
admin | Acesso total — leitura e escrita em todos os recursos |
diretor | Leitura total, sem criação/edição de usuários |
superintendente | Gerencia usuários e estrutura da sua área |
regional | Gerencia gestores comerciais da sua regional |
gestor_comercial | Acesso de leitura aos dados da sua carteira |
Respostas & Erros
Todas as respostas seguem um formato consistente com o campo ok indicando sucesso ou falha.
Formato de sucesso
// Operação de escrita { "ok": true } // Criação com ID gerado { "ok": true, "id": 42 } // Listagem { "ok": true, "data": [ /* array */ ] }
Formato de erro
{ "ok": false, "erro": "Descrição do problema" }
Códigos HTTP
| Código | Significado | Quando ocorre |
|---|---|---|
| 200 | OK | Operação bem-sucedida |
| 201 | Created | Recurso criado com sucesso |
| 400 | Bad Request | Campos obrigatórios ausentes ou inválidos |
| 401 | Unauthorized | Token ausente, inválido ou expirado |
| 403 | Forbidden | Role sem permissão para esta operação |
| 404 | Not Found | Recurso não encontrado |
| 409 | Conflict | Login ou registro já existe |
| 429 | Too Many Requests | Rate limit atingido — aguarde e tente novamente |
| 500 | Server Error | Erro inesperado no servidor |
Paginação
Endpoints com grandes volumes de dados usam paginação por offset. Passe page (padrão: 1) e per_page (padrão: 50). A resposta inclui sempre total, page, per_page e pages (ou total_pages). Endpoints com volumes menores (usuários, estrutura) retornam todos os registros visíveis ao actor autenticado sem paginação.
Ambientes
A API opera em dois ambientes. Use o de desenvolvimento para testar integrações antes de ir para produção.
| Ambiente | Base URL | Descrição |
|---|---|---|
| Produção | https://seu-dominio.com/api |
Dados reais. Requer credenciais de produção. |
| Desenvolvimento | http://localhost:8080/api |
Banco local. Credenciais padrão: login admin, senha definida em ADMIN_PASSWORD. |
DATABASE_URL aponta para o banco, JWT_SECRET assina os tokens, ADMIN_PASSWORD define a senha do admin na inicialização. Veja o .env.example do repositório para a lista completa.
Headers recomendados
Authorization: Bearer <seu_token> Content-Type: application/json Accept: application/json
Rate Limits
O servidor limita requisições por usuário autenticado — não por IP — para proteger o banco de ingestões abusivas.
Perfis de limite
| Perfil | Limite | Chave | Quais endpoints |
|---|---|---|---|
| Padrão | 300 / min · 10 / s | IP de origem | Todos os endpoints não listados abaixo |
| Bulk | 6 / min | Login autenticado | POST /json (estrutura, usuários, parceiros, produção) |
| Heavy | 2 / min | Login autenticado | POST /json?replace=true · DELETE /parceiros/:cod |
Resposta 429
HTTP/1.1 429 Too Many Requests
Retry-After: 12
{ "ok": false, "erro": "Rate limit excedido. Tente novamente em instantes." }
Mapa por endpoint
| Endpoint | Perfil | Limite |
|---|---|---|
POST /api/estrutura-comercial/json | Bulk | 6 / min |
POST /api/usuarios/json | Bulk | 6 / min |
POST /api/parceiros/json | Bulk | 6 / min |
POST /api/parceiros/json?replace=true | Heavy | 2 / min |
PUT /api/parceiros/:cod | Bulk | 6 / min |
DELETE /api/parceiros/:cod | Heavy | 2 / min |
POST /api/producao-parceiro/json | Bulk | 6 / min |
POST /api/producao-parceiro/json?replace=true | Heavy | 2 / min |
Gestão Comercial
Gerencie a estrutura da sua equipe comercial: criação de usuários com controle hierárquico e montagem da árvore superintendente → regional → gestor comercial.
Recursos disponíveis
Sobre a hierarquia
O modelo de acesso segue uma pirâmide: cada role só enxerga e gerencia o que está abaixo dela. Ao criar um usuário com role superintendente, regional ou gestor_comercial, a linha correspondente na Estrutura Comercial é criada ou atualizada automaticamente.
| Role | Campos hierárquicos obrigatórios |
|---|---|
admin | Nenhum — acesso total |
superintendente | Nenhum (é o topo da hierarquia) |
regional | superintendente |
gestor_comercial | superintendente + regional |
Usuários Gestão Comercial
Criação e gestão de usuários com controle de hierarquia. Base: /api/usuarios
/api/usuarios
Retorna todos os usuários visíveis ao actor autenticado (filtrado por hierarquia). Admin e diretor recebem a lista completa.
[
{
"login": "joao.silva",
"nome": "João Silva",
"role": "gestor_comercial",
"superintendente": "Carlos Motta",
"regional": "Ana Lima",
"comercial": "João Silva",
"email": "joao@empresa.com",
"celular": "11999990000",
"situacao": "ativo",
"acesso_gestao_acessos": false,
"must_change_password": false
}
]
Retorna um único usuário pelo login. Respeita a hierarquia — você só pode buscar usuários no seu escopo.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| login | string | Login único do usuário (ex: joao.silva) |
{
"login": "joao.silva",
"nome": "João Silva",
"role": "gestor_comercial",
"superintendente": "Carlos Motta",
"regional": "Ana Lima",
"comercial": "João Silva",
"email": "joao@empresa.com",
"situacao": "ativo",
"estrutura_id": 12
}
404 Usuário não encontrado 403 Fora do seu escopo hierárquico
Cria o usuário e, se o role for hierárquico, atualiza a estrutura_comercial automaticamente. O campo must_change_password é sempre true na criação.
superintendente, regional e comercial devem conter os nomes exatos que estão nos outros usuários da mesma hierarquia — eles são usados como chave de vínculo.
{
"login": "joao.silva", // obrigatório, único
"senha": "SenhaForte123!", // obrigatório
"nome": "João Silva", // obrigatório
"role": "gestor_comercial", // obrigatório
// Hierarquia — obrigatório conforme role
"superintendente": "Carlos Motta",
"regional": "Ana Lima",
"comercial": "João Silva",
// Opcionais
"email": "joao@empresa.com",
"celular": "(11) 99999-0000",
"situacao": "ativo",
"acesso_gestao_acessos": false,
"permissoes_dashboards": {}
}
admin · diretor · superintendente · regional · gestor_comercial
{ "ok": true }
400 Campos obrigatórios ausentes ou hierarquia inválida 409 Login já existe
Aceita qualquer subconjunto de campos. Apenas os campos enviados são atualizados. Se alterar hierarquia, re-sincroniza estrutura_id automaticamente.
| Campo | Tipo | Observação |
|---|---|---|
| nome | string | |
| role | string | Ver roles válidas acima |
| superintendente | string | Nome exato |
| regional | string | Nome exato |
| comercial | string | Nome exato |
| string | ||
| celular | string | Formatação livre |
| situacao | string | ativo ou inativo |
| senha | string | Se enviado, força must_change_password=true |
| acesso_gestao_acessos | boolean | |
| permissoes_dashboards | object | Chaves livres |
{"situacao": "inativo"}.
{ "ok": true, "item": { /* campos atualizados */ } }
PUT {"situacao": "inativo"} na maioria dos casos. O login admin não pode ser excluído.
200 {"ok": true} 403 Admin protegido 404 Não encontrado
Upsert de até 500 usuários por requisição. Usuários existentes são atualizados; novos são criados. Senha é gerada automaticamente quando omitida. Requer role admin. Limite: 6 requisições / minuto por usuário autenticado.
[
{
"login": "joao.silva", // obrigatório
"nome": "João Silva", // obrigatório
"role": "gestor_comercial", // obrigatório
"senha": "SenhaForte123!", // opcional — gerada se omitida
"superintendente": "Carlos Motta",
"regional": "Ana Lima",
"comercial": "João Silva",
"email": "joao@empresa.com",
"situacao": "ativo"
}
]
- Se
senhanão for enviada: senha temporária gerada e retornada emcriados_detalhes. - Se
senhafor enviada num upsert (usuário existente): a senha armazenada é substituída. - Se
senhafor omitida num upsert: a senha atual não é alterada.
{
"ok": true,
"total": 100,
"criados": 80,
"atualizados": 20,
"erros": [],
"criados_detalhes": [
{ "login": "joao.silva", "senha_gerada": "xK7mN2pQ4r" }
]
}
Estrutura Comercial Gestão Comercial
Hierarquia superintendente → regional → comercial. Base: /api/estrutura-comercial
/api/estrutura-comercial
Admin e diretor recebem toda a estrutura ativa. Outros roles recebem apenas os nós abaixo deles.
{
"ok": true,
"estrutura": [
{
"id": 12,
"superintendente": "Carlos Motta",
"regional": "Ana Lima",
"comercial": "João Silva",
"situacao": "ativo",
"data_inicio": "2024-03-01",
"data_fim": null,
"origem": "cadastro_usuario"
}
]
}
Cria um nó na hierarquia comercial. Se o nó (mesma combinação superintendente/regional/comercial, case-insensitive) já existir, atualiza os campos enviados — seguro chamar de forma idempotente.
{
"superintendente": "Carlos Motta", // obrigatório
"regional": "Ana Lima", // opcional
"comercial": "João Silva", // opcional
"situacao": "ativo", // "ativo" | "inativo"
"data_inicio": "2024-03-01", // opcional
"data_fim": null // opcional
}
{ "ok": true, "id": 42 }
400 superintendente ausente 403 Sem permissão (role != admin)
Atualiza campos de um nó específico. Apenas os campos enviados são modificados.
superintendente, regional, comercial) pode quebrar o vínculo com usuários e parceiros já associados a este nó. Prefira desativar o nó antigo (situacao=inativo) e criar um novo.
| Campo | Tipo | Observação |
|---|---|---|
| situacao | string | ativo ou inativo — uso mais comum |
| data_inicio | string | Data de admissão |
| data_fim | string | Data de desligamento |
| superintendente | string | ⚠ Pode quebrar vínculos |
| regional | string | ⚠ Pode quebrar vínculos |
| comercial | string | ⚠ Pode quebrar vínculos |
{ "ok": true }
PUT {"situacao": "inativo"}. A exclusão desvincula automaticamente todos os usuários e parceiros que referenciam este nó (FK ON DELETE SET NULL). Use apenas para nós criados por engano.
200 {"ok": true} 404 Não encontrado 403 Sem permissão
Substitui toda a estrutura pela planilha enviada. Re-linka usuários e parceiros automaticamente após o import.
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| arquivo | file .xlsx | ✓ | Planilha com colunas SUPERINTENDENTE, REGIONAL, COMERCIAL |
| Coluna | Aliases aceitos | Req? |
|---|---|---|
| SUPERINTENDENTE | SUPER | ✓ |
| REGIONAL | GESTOR REGIONAL | ✓ |
| COMERCIAL | GESTOR COMERCIAL · CONSULTOR | ✓ |
| DATA INICIO | DT INICIO · DATA ADMISSAO | opcional |
| DATA FIM | DT FIM · DATA DESLIGAMENTO | opcional |
| SITUAÇÃO | SITUACAO DO COLABORADOR NA EMPRESA · STATUS | opcional |
{
"ok": true,
"linhas": 48,
"estrutura": [ /* lista completa atualizada */ ]
}
Upsert de até 2 000 nós por requisição. Nós existentes (mesma combinação sup/reg/com) são atualizados. Requer role admin. Limite: 6 requisições / minuto por usuário autenticado.
[
{
"superintendente": "Carlos Motta", // obrigatório
"regional": "Ana Lima", // opcional
"comercial": "João Silva", // opcional
"situacao": "ativo",
"data_inicio": "2024-03-01"
}
]
{
"ok": true,
"total": 200,
"inseridos": 150,
"atualizados": 50,
"erros": []
}
Parceiros
Cadastro, consulta e atualização de parceiros com vinculação automática à estrutura comercial. Base: /api/parceiros
superintendente, regional e comercial.
/api/parceiros
Retorna parceiros visíveis ao actor autenticado, filtrados em SQL pelo escopo hierárquico. O campo dados_json é omitido da listagem por performance — use o endpoint individual para obtê-lo.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
| q | string | — | Busca por nome ou código do parceiro |
| superintendente | string | — | Filtra pelo nome do superintendente |
| regional | string | — | Filtra pelo nome do regional |
| comercial | string | — | Filtra pelo nome do gestor comercial |
| status | string | — | Ex: Ativo, Inativo |
| cidade | string | — | Filtra pela cidade |
| pendente | boolean | — | true = parceiros sem vínculo de estrutura |
| page | int | 1 | Página atual |
| per_page | int | 50 | Itens por página (máx 200) |
{
"ok": true,
"total": 1230,
"page": 1,
"per_page": 50,
"pages": 25,
"parceiros": [
{
"cod": 1234,
"nome": "Fulano de Tal",
"status": "Ativo",
"cidade": "São Paulo",
"uf": "SP",
"superintendente": "Carlos Motta",
"regional": "Ana Lima",
"comercial": "João Silva",
"estrutura_id": 12
}
]
}
Retorna o registro completo incluindo dados_json. Respeita o escopo hierárquico do actor autenticado.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| cod | int | Código numérico do parceiro |
{
"ok": true,
"parceiro": {
"cod": 1234,
"nome": "Fulano de Tal",
"status": "Ativo",
"cidade": "São Paulo",
"uf": "SP",
"superintendente": "Carlos Motta",
"regional": "Ana Lima",
"comercial": "João Silva",
"estrutura_id": 12,
"dados_json": {
"cpf_cnpj": "123.456.789-00",
"email": "fulano@email.com"
}
}
}
404 Não encontrado 403 Fora do escopo hierárquico
Upsert de até 5 000 parceiros por requisição. Campos extras (fora do schema base) são armazenados automaticamente em dados_json. Requer role admin. Limite: 6 req/min (sem replace) ou 2 req/min (com replace=true) por usuário autenticado.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
| replace | boolean | false | Se true, parceiros do escopo do actor ausentes do payload são marcados como Inativo |
[
{
"cod": 1234, // obrigatório, int
"nome": "Fulano de Tal", // obrigatório
"status": "Ativo", // opcional
"cidade": "São Paulo", // opcional
"uf": "SP", // opcional
"superintendente": "Carlos Motta", // para vínculo automático
"regional": "Ana Lima",
"comercial": "João Silva",
"cpf_cnpj": "123.456.789-00", // → dados_json
"email": "fulano@mail.com" // → dados_json
}
]
{
"ok": true,
"importados": 4988,
"erros": [],
"pendentes_vinculo": 12
}
estrutura_id. Importe a estrutura primeiro ou corrija os nomes.
Atualiza campos do parceiro. Apenas os campos enviados são modificados. Para dados_json, os campos enviados são fundidos (merge) com os existentes — não substituídos. Requer role admin. Limite: 6 req/min.
| Campo | Tipo | Observação |
|---|---|---|
| nome | string | |
| status | string | Ex: Ativo, Inativo |
| cidade | string | |
| uf | string | Sigla do estado |
| superintendente | string | Re-resolve vínculo após atualização |
| regional | string | Re-resolve vínculo após atualização |
| comercial | string | Re-resolve vínculo após atualização |
| dados_json | object | Fundido (merge) com os dados existentes, não substituído |
{ "ok": true }
status para "Inativo" na maioria dos casos. Requer role admin. Limite: 2 req/min.
200 {"ok": true} 404 Não encontrado 403 Sem permissão
Produção Parceiro
Ingestão e consulta de dados mensais de produção por parceiro, produto e operação. Base: /api/producao-parceiro
cod. O parceiro deve existir e estar Ativo antes da ingestão. Registros com cod inválido são registrados em erros mas não cancelam o lote inteiro.
/api/producao-parceiro
Upsert de até 50 000 registros por requisição. Itens com o mesmo (cod, ano, mes, produto, operacao) têm seus valores somados antes do upsert — útil para envios fragmentados da mesma competência. Requer role admin. Limite: 6 req/min (sem replace) ou 2 req/min (com replace=true).
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
| replace | boolean | false | Se true, exclui todos os registros existentes das competências presentes no payload antes de inserir |
[
{
"cod": 1234, // obrigatório — código do parceiro
"ano": "2024", // obrigatório — 2 ou 4 dígitos
"mes": "03", // obrigatório — 1 a 12
"produto": "CDC", // opcional — default "Sem produto"
"operacao": "Novo", // opcional — default "Sem operacao"
"valor": 15000.00,
"qtd": 10,
"prazo": 24
}
]
- Ano com 2 dígitos:
"24"→"2024" - Mês numérico:
3→"03" - Duplicatas no mesmo lote (mesmo cod/ano/mes/produto/operacao): valores são somados
{
"ok": true,
"inseridos": 49250,
"erros": [
{ "cod": 9999, "motivo": "parceiro não encontrado ou inativo" }
],
"competencias": [ "24/03", "24/04" ]
}
competencias lista as competências (AA/MM) processadas — útil para confirmar quais períodos foram inseridos.
Retorna registros de produção com o nome do parceiro incluído via JOIN. Qualquer usuário autenticado pode consultar, restrito ao seu escopo hierárquico.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
| cod | int | — | Filtra pelo código do parceiro |
| ano | string | — | Filtra pelo ano (4 dígitos) |
| mes | string | — | Filtra pelo mês (2 dígitos) |
| mes_ref | string | — | Filtro rápido por competência no formato AA/MM (ex: 24/03) |
| page | int | 1 | Página atual |
| per_page | int | 50 | Itens por página (máx 500) |
{
"ok": true,
"total": 5000,
"page": 1,
"per_page": 50,
"pages": 100,
"registros": [
{
"parceiro_cod": 1234,
"nome": "Fulano de Tal",
"ano": "2024",
"mes": "03",
"produto": "CDC",
"operacao": "Novo",
"valor": 15000.00,
"qtd": 10,
"prazo": 24
}
]
}
Ordem de ingestão recomendada
Para uma carga inicial completa, respeite esta sequência para evitar erros de referência:
- Estrutura Comercial —
POST /api/estrutura-comercial/json - Usuários —
POST /api/usuarios/json - Parceiros —
POST /api/parceiros/json - Produção —
POST /api/producao-parceiro/json
Agenda
Agendamentos de visitas presenciais, remotas e atividades internas com detecção de conflito de horário. Base: /api/agenda
id único gerado pelo cliente (UUID recomendado). O endpoint POST /api/agenda é idempotente — enviar o mesmo id novamente atualiza o evento existente.
/api/agenda
Retorna eventos visíveis ao actor autenticado filtrados por escopo hierárquico. Por padrão retorna os eventos dos últimos 90 dias e próximos 90 dias.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
| inicio | string | hoje − 90 dias | Data inicial no formato YYYY-MM-DD |
| fim | string | hoje + 90 dias | Data final no formato YYYY-MM-DD |
| all | string | — | Passe all=1 para ignorar o filtro de período e retornar todos os eventos |
| Role | O que enxerga |
|---|---|
admin · diretor | Todos os eventos |
gestor_comercial | Apenas os próprios eventos |
superintendente · regional | Eventos da sua hierarquia |
[
{
"id": "uuid-do-evento",
"cod_parceiro": 1234,
"nome_parceiro": "Fulano de Tal",
"titulo": "Visita de relacionamento",
"inicio_data": "2024-03-15",
"inicio_hora": "09:00",
"fim_data": "2024-03-15",
"fim_hora": "10:00",
"motivo_visita": "Relacionamento",
"tipo_visita": "presencial",
"status_ag": "agendado",
"criado_por": "joao.silva",
"meet_link": "",
"convidados_json": []
}
]
Upsert por id. Se o evento já existir, todos os campos enviados são atualizados. O sistema verifica conflito de horário: visitas ao mesmo parceiro com menos de 1 hora de intervalo são rejeitadas com 409.
{
"id": "uuid-do-evento", // obrigatório
"cod_parceiro": 1234, // opcional
"nome_parceiro":"Fulano de Tal", // opcional
"titulo": "Visita", // opcional
"inicio_data": "2024-03-15", // opcional — default hoje
"inicio_hora": "09:00", // opcional — default "09:00"
"fim_data": "2024-03-15", // opcional
"fim_hora": "10:00", // opcional — default "10:00"
"motivo_visita":"Relacionamento", // opcional — default "Outros"
"tipo_visita": "presencial", // "presencial" | "remoto"
"status_ag": "agendado", // "agendado" | "realizado" | "desmarcado"
"local": "Agência Centro",
"parecer": "Reunião produtiva",
"dia_inteiro": false,
"gerar_meet": false,
"convidados": [
{ "login": "maria.lima", "nome": "Maria Lima" }
],
"plano_visita": [],
"perfil_estabelecimento": []
}
{ "ok": true, "item": { /* evento salvo */ } }
400 id ausente 409 Conflito de horário no mesmo parceiro
Remove um evento pelo seu ID. O gestor_comercial só pode remover eventos que criou. Outros roles respeitam o escopo hierárquico.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| ev_id | string | ID do evento (mesmo id enviado no POST) |
200 {"ok": true} 404 Não encontrado 403 Fora do escopo
admin.
200 {"ok": true} 403 Sem permissão
Retorna um mapa de cod_parceiro → lista de perfis de estabelecimento registrados historicamente, ordenados por frequência. Usado para pré-preencher o campo no formulário de agendamento.
{
"1234": [ "Loja", "Home Office" ],
"5678": [ "Escritório" ]
}
Prospecções
Cadastro e gestão de leads comerciais com filtro hierárquico e paginação. Base: /api/prospeccoes
id gerado pelo cliente. O POST /api/prospeccoes é idempotente — o mesmo id atualiza o registro existente.
/api/prospeccoes
Retorna prospecções visíveis ao actor autenticado filtradas por escopo hierárquico. Admin e diretor recebem todas. Demais roles recebem apenas as que estão dentro da sua hierarquia ou que criaram.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
| page | int | 1 | Página atual |
| per_page | int | 50 | Itens por página (máx 2 000) |
{
"ok": true,
"total": 320,
"page": 1,
"per_page": 50,
"total_pages": 7,
"items": [
{
"id": "uuid-da-prospeccao",
"nome": "João Empreendimentos",
"cnpj": "12.345.678/0001-90",
"responsavel": "João Souza",
"cidade_com": "São Paulo",
"uf_com": "SP",
"status_prosp": "Em andamento",
"comercial": "João Silva",
"regional": "Ana Lima",
"superintendente": "Carlos Motta",
"produtos": [ "CDC", "Consignado" ],
"media_producao": 25000.00,
"criado_por": "joao.silva",
"atualizado_em":"2024-03-15T10:30:00Z"
}
]
}
Upsert por id. Os campos de hierarquia (comercial, regional, superintendente) são preenchidos automaticamente com os valores do usuário autenticado quando omitidos.
{
"id": "uuid-da-prospeccao", // obrigatório
"nome": "João Empreendimentos",
"cnpj": "12.345.678/0001-90",
"responsavel": "João Souza",
// Endereço cadastral
"end_cad": "Rua das Flores, 100",
"bairro_cad": "Centro",
"cidade_cad": "São Paulo",
"uf_cad": "SP",
// Endereço comercial
"end_com": "Av. Paulista, 1000",
"cidade_com": "São Paulo",
"uf_com": "SP",
// Contatos
"fone1": "(11) 99999-0000",
"email": "joao@empresa.com",
// Classificação
"produtos": [ "CDC", "Consignado" ],
"media_producao": 25000.00,
"status_prosp": "Em andamento",
"motivo_visita":"Prospecção",
"data_visita": "2024-03-15",
"parecer": "Cliente interessado",
// Hierarquia — preenchida automaticamente se omitida
"comercial": "João Silva",
"regional": "Ana Lima",
"superintendente": "Carlos Motta"
}
{ "ok": true, "item": { /* prospecção salva */ } }
400 id ausente
Remove uma prospecção pelo seu ID numérico. Qualquer usuário autenticado pode remover registros dentro do seu escopo.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| id | int | ID numérico da prospecção |
200 {"ok": true} 401 Não autenticado
Brand
Endpoint público de configuração de white-label. Retorna as variáveis de marca ativas sem necessidade de autenticação. Base: /api/brand
BRAND_*). Nenhuma autenticação é necessária — este endpoint é chamado pelo frontend na inicialização para aplicar o tema da marca.
/api/brand
Retorna as configurações visuais e de identidade da marca configuradas via variáveis de ambiente. Endpoint público — não requer autenticação.
| Variável | Default | Descrição |
|---|---|---|
| BRAND_NAME | "Painel" | Nome da marca exibido na aplicação |
| BRAND_SLOGAN | "" | Slogan ou subtítulo da marca |
| BRAND_PRIMARY_COLOR | "#4F46E5" | Cor primária (hex) |
| BRAND_SECONDARY_COLOR | "#7C3AED" | Cor secundária (hex) |
| BRAND_LOGO_URL | "" | URL do logotipo (opcional) |
| BRAND_FAVICON_URL | "" | URL do favicon (opcional) |
{
"name": "Minha Empresa",
"slogan": "Soluções financeiras",
"primaryColor": "#1D4ED8",
"secondaryColor": "#1E40AF",
"logoUrl": "https://cdn.empresa.com/logo.png",
"faviconUrl": "https://cdn.empresa.com/favicon.ico"
}
Admin
Endpoints exclusivos para o role admin. Permitem gerenciar parceiros pendentes de vinculação, diagnosticar a hierarquia e aplicar migrações de banco de dados. Base: /api/admin
admin. Qualquer outro role recebe 403 Forbidden.
/api/admin
Retorna todos os parceiros com flag pendente_vinculo = TRUE, enriquecidos com totais de efetivação e meses com produção, além da lista de estruturas comerciais disponíveis para vinculação.
{
"ok": true,
"parceiros": [
{
"cod": 1234,
"nome": "Fulano de Tal",
"ef_total": 150000.00,
"meses_com_producao": 8,
"pendente_vinculo": true
}
],
"estruturas": [
{
"id": 10,
"nome": "Regional SP Sul",
"tipo": "regional"
}
]
}
Define a estrutura comercial de um parceiro pendente e marca pendente_vinculo = FALSE.
{
"cod": 1234, // código do parceiro (obrigatório)
"estrutura_id": 10 // ID da estrutura comercial (obrigatório)
}
{ "ok": true }
400 Campos ausentes 404 Parceiro não encontrado
Retorna parceiros que não possuem estrutura_id definido, agrupados por superintendente, regional e gestor comercial. Útil para identificar registros órfãos após importações em lote.
{
"ok": true,
"sem_vinculo": 42, // total de parceiros sem estrutura_id
"estrutura": {
"Carlos Motta": { // superintendente
"Ana Lima": { // regional
"João Silva": [ // gestor_comercial → lista de parceiros
{ "cod": 1234, "nome": "Fulano de Tal" }
]
}
}
}
}
Fale com a desenvolvedora
Dúvidas sobre integração, autenticação ou comportamento da API? Entre em contato diretamente.
Canais de atendimento
| Canal | Contato |
|---|---|
| monica.ufop1@gmail.com | |
| (19) 99846-8664 |
Desenvolvido por
A Helvora desenvolve soluções de tecnologia, inteligência artificial e gestão comercial para negócios financeiros.
Saiba mais em www.helvora.com.br