API Parceiro V2
Interface REST para sistemas integrados gerenciarem parceiros, usuários, hierarquia comercial e dados de produção no Painel Comercial.
O que você pode fazer
A API Parceiro V2 expõe os recursos do Painel Comercial como endpoints REST autenticados por JWT. Você pode cadastrar e gerenciar parceiros, montar a estrutura comercial da equipe, criar e administrar usuários com controle hierárquico e submeter dados de produção mensal e diária.
Base URL
https://sua-instancia.dominio.com.br/api
Todos os endpoints retornam Content-Type: application/json. Requisições com corpo devem usar Content-Type: application/json, exceto uploads de arquivo que usam multipart/form-data.
Autenticação
A API usa JWT (JSON Web Token). Obtenha o token via login e envie-o em todas as requisições subsequentes.
1. Obter o token
curl -X POST https://sua-instancia.dominio.com.br/api/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
Inclua o token no header Authorization de toda requisição autenticada:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Alternativamente, browsers podem usar o cookie app_token definido automaticamente pelo login.
Outros endpoints de auth
{
"ok": true,
"login": "seu_login",
"nome": "Seu Nome",
"role": "admin",
"permissoes_dashboards": {}
}
Limpa o cookie app_token. O JWT em si permanece válido até expirar — para invalidação imediata, descarte o token no cliente.
200 {"ok": true}
{
"senha_atual": "SenhaAtual",
"nova_senha": "NovaSenha123!"
}
200 {"ok": true} 401 Senha atual incorreta
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 envelope consistente com o campo ok indicando sucesso ou falha.
Formato padrão
// Operação de escrita { "ok": true } // Criação com ID gerado { "ok": true, "id": 42 } // Listagem { "ok": true, "data": [ /* array */ ] } // 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 |
| 500 | Server Error | Erro inesperado no servidor |
Headers recomendados
Authorization: Bearer <token> Content-Type: application/json Accept: application/json
Parceiros
Cadastro e gestão de parceiros com vinculação à estrutura comercial. Base: /api/parceiros
/api/parceirosRetorna os parceiros visíveis ao actor autenticado, filtrados pela hierarquia. Suporta filtros opcionais via query string.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| superintendente | string | Filtra por nome do superintendente |
| regional | string | Filtra por nome do regional |
| comercial | string | Filtra por nome do gestor comercial |
| situacao | string | ativo ou inativo |
[
{
"cod": 1001,
"nome": "Parceiro Exemplo",
"cpf_cnpj": "00.000.000/0001-00",
"situacao": "ativo",
"superintendente": "Carlos Motta",
"regional": "Ana Lima",
"comercial": "João Silva",
"estrutura_id": 12,
"uf": "SP",
"municipio": "São Paulo",
"data_inicio": "2024-01-15"
}
]
Retorna um parceiro pelo código numérico. Inclui dados completos de perfil.
404 Parceiro não encontrado 403 Fora do escopo hierárquico
Retorna o contexto completo de um parceiro: dados cadastrais, histórico de produção resumido e próximos eventos de agenda.
{
"parceiro": { /* dados cadastrais */ },
"producao": [ /* últimos meses */ ],
"agenda": [ /* próximos eventos */ ]
}
Aceita qualquer subconjunto de campos. Apenas os campos enviados são atualizados.
| Campo | Tipo |
|---|---|
| nome | string |
| cpf_cnpj | string |
| situacao | ativo | inativo |
| superintendente | string (nome exato) |
| regional | string (nome exato) |
| comercial | string (nome exato) |
| uf | string (sigla) |
| municipio | string |
| data_inicio | string (YYYY-MM-DD) |
| data_fim | string (YYYY-MM-DD) |
200 {"ok": true}
Atualiza campos de perfil (dados de contato, notas) sem alterar vínculos hierárquicos. Aceita qualquer combinação de campos.
{
"telefone": "11999990000",
"email": "contato@parceiro.com",
"notas": "observação livre"
}
200 {"ok": true}
PUT {"situacao": "inativo"} na maioria dos casos para preservar o histórico. A exclusão é permanente e remove toda produção vinculada.
200 {"ok": true} 404 Não encontrado
Importa ou atualiza parceiros em massa. O campo cod é a chave de upsert — se o código já existir, os campos são atualizados; se não, um novo parceiro é criado.
| Campo | Tipo | Req? | Descrição |
|---|---|---|---|
| arquivo | file .xlsx | ✓ | Planilha com os dados dos parceiros |
| Coluna | Req? |
|---|---|
| COD / CÓDIGO | ✓ |
| NOME | ✓ |
| CPF / CNPJ | opcional |
| SITUAÇÃO / SITUACAO / STATUS | opcional |
| SUPERINTENDENTE / SUPER | opcional |
| REGIONAL / GESTOR REGIONAL | opcional |
| COMERCIAL / GESTOR COMERCIAL | opcional |
| UF | opcional |
| MUNICÍPIO / MUNICIPIO | opcional |
| DATA INICIO / DT INICIO | opcional |
{
"ok": true,
"importados": 150,
"atualizados": 12,
"erros": 0
}
Equivalente ao endpoint de importação via planilha, mas aceita um array JSON. Útil para integrações programáticas sem geração de arquivo.
[
{
"cod": 1001,
"nome": "Parceiro Exemplo",
"cpf_cnpj": "00.000.000/0001-00",
"situacao": "ativo",
"superintendente": "Carlos Motta",
"regional": "Ana Lima",
"comercial": "João Silva",
"uf": "SP",
"municipio": "São Paulo"
}
]
{ "ok": true, "importados": 150, "atualizados": 12 }
Retorna contagens e sumários da carteira do actor autenticado: total de parceiros, por situação, por UF.
{
"total": 320,
"ativos": 280,
"inativos": 40,
"por_uf": { "SP": 120, "RJ": 60 }
}
| Parâmetro | Req? | Descrição |
|---|---|---|
| q | ✓ | Texto para busca (nome ou código) |
[{ "cod": 1001, "nome": "Parceiro Exemplo" }]
Usuários
Criação e gestão de usuários com controle de hierarquia. Base: /api/usuarios
/api/usuariosRetorna 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 usuário pelo login. Respeita a hierarquia — você só pode buscar usuários no seu escopo.
404 Não encontrado 403 Fora do escopo hierárquico
Cria o usuário e, se o role for hierárquico, atualiza a estrutura comercial automaticamente.
superintendente, regional e comercial devem conter os nomes exatos dos usuários da mesma hierarquia — eles são a chave de vínculo.
{
"login": "joao.silva",
"senha": "SenhaForte123!",
"nome": "João Silva",
"role": "gestor_comercial",
"superintendente": "Carlos Motta",
"regional": "Ana Lima",
"comercial": "João Silva",
"email": "joao@empresa.com",
"celular": "(11) 99999-0000",
"situacao": "ativo"
}
admin · diretor · superintendente · regional · gestor_comercial
| Role | Campos obrigatórios |
|---|---|
admin / diretor | Nenhum |
superintendente | Nenhum (é o topo) |
regional | superintendente |
gestor_comercial | superintendente + regional |
200 {"ok": true} 400 Hierarquia inválida 409 Login já existe
Aceita qualquer subconjunto de campos. Apenas os campos enviados são atualizados. Alterar hierarquia re-sincroniza o estrutura_id automaticamente.
{"situacao": "inativo"}
200 {"ok": true, "item": {...}}
admin não pode ser excluído.
200 {"ok": true} 403 Admin protegido 404 Não encontrado
Aceita um array de objetos com a mesma estrutura do POST /api/usuarios. Processa cada item com upsert por login.
200 {"ok": true, "importados": N, "erros": []}
Estrutura Comercial
Hierarquia superintendente → regional → comercial. Base: /api/estrutura-comercial
/api/estrutura-comercialAdmin 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
}
]
}
Cria ou atualiza (upsert) um nó. Se a combinação superintendente/regional/comercial já existir, atualiza os campos enviados.
{
"superintendente": "Carlos Motta",
"regional": "Ana Lima",
"comercial": "João Silva",
"situacao": "ativo",
"data_inicio": "2024-03-01"
}
201 {"ok": true, "id": 42} 400 superintendente ausente
situacao=inativo) e criar um novo.
200 {"ok": true}
PUT {"situacao": "inativo"}. A exclusão desvincula automaticamente todos os usuários e parceiros associados a este nó.
200 {"ok": true} 404 Não encontrado
Substitui toda a estrutura pela planilha enviada. Re-vincula usuários e parceiros automaticamente após o import.
| Campo | Tipo | Req? | Colunas aceitas |
|---|---|---|---|
| arquivo | file .xlsx | ✓ | SUPERINTENDENTE, REGIONAL, COMERCIAL, DATA INICIO, DATA FIM, SITUAÇÃO |
200 {"ok": true, "linhas": 48, "estrutura": [...]}
Equivalente ao upload, mas aceita um array JSON. Cada item deve ter ao menos superintendente.
200 {"ok": true, "importados": N}
Produção
Ingestão e consulta de dados de produção mensal e diária por parceiro. Base: /api/producao
/api/producaoRetorna a produção mensal do período mais recente carregado, filtrada pelo escopo hierárquico do actor.
| Parâmetro | Descrição |
|---|---|
| superintendente | Filtra por nome |
| regional | Filtra por nome |
| comercial | Filtra por nome |
| cod_parceiro | Código numérico do parceiro |
[
{
"cod_parceiro": 1001,
"nome_parceiro": "Parceiro Exemplo",
"mes_ref": "2024-08",
"valor_bruto": 15000.00,
"quantidade": 42,
"produto": "PRODUTO_A"
}
]
Retorna dados de produção diária com filtros de período.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| data_inicio | string | YYYY-MM-DD (padrão: primeiro dia do mês) |
| data_fim | string | YYYY-MM-DD (padrão: hoje) |
| cod_parceiro | integer | Filtra por parceiro |
Retorna dados de produção agrupados por parceiro e mês, com colunas dinâmicas por produto.
Insere ou substitui (upsert por cod_parceiro + mes_ref + produto) dados de produção mensal.
[
{
"cod_parceiro": 1001,
"mes_ref": "2024-08",
"produto": "PRODUTO_A",
"valor_bruto": 15000.00,
"quantidade": 42
}
]
200 {"ok": true, "inseridos": N, "atualizados": M}
Formato alternativo para envio em bulk de produção mensal agrupada por parceiro e mês, com múltiplos produtos em um único objeto.
[
{
"cod_parceiro": 1001,
"mes_ref": "2024-08",
"produtos": {
"PRODUTO_A": { "valor_bruto": 15000.00, "quantidade": 42 },
"PRODUTO_B": { "valor_bruto": 8000.00, "quantidade": 20 }
}
}
]
200 {"ok": true, "processados": N}
Processa uma planilha Excel e insere/atualiza produção mensal. O template da planilha pode ser obtido com o responsável técnico da plataforma.
| Campo | Tipo | Req? |
|---|---|---|
| arquivo | file .xlsx | ✓ |
200 {"ok": true, "processados": N, "erros": []}
Insere produção diária a partir de uma planilha. Processa upsert por cod_parceiro + data + produto.
| Campo | Tipo | Req? |
|---|---|---|
| arquivo | file .xlsx | ✓ |
200 {"ok": true, "processados": N}
Prospecções
Registro e consulta de leads e prospects vinculados a gestores comerciais. Base: /api/prospeccoes
/api/prospeccoesRetorna as prospecções visíveis ao actor autenticado, filtradas por hierarquia.
[
{
"id": "uuid-string",
"nome": "Empresa Prospect",
"cpf_cnpj": "00.000.000/0001-00",
"status": "em_andamento",
"responsavel": "joao.silva",
"data_criacao": "2024-08-01T10:00:00",
"notas": "Contato inicial feito"
}
]
{
"nome": "Empresa Prospect",
"cpf_cnpj": "00.000.000/0001-00",
"status": "em_andamento",
"responsavel": "joao.silva",
"notas": "Contato inicial feito"
}
em_andamento · convertido · perdido · sem_interesse
200 {"ok": true, "id": "uuid"} 400 nome ausente
O id é uma string (UUID ou identificador textual). Requer que o actor seja o responsável pela prospecção ou tenha role admin/diretor.
200 {"ok": true} 404 Não encontrada 403 Sem permissão
Agenda
Eventos de agenda comercial — criação, listagem e remoção. Base: /api/agenda
/api/agendaRetorna eventos do actor autenticado e dos usuários abaixo na hierarquia.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| data_inicio | string | YYYY-MM-DD |
| data_fim | string | YYYY-MM-DD |
| responsavel | string | Login do responsável |
| cod_parceiro | integer | Filtra por parceiro vinculado |
[
{
"id": 1,
"titulo": "Visita ao parceiro",
"tipo": "visita",
"data_hora": "2024-09-15T10:00:00",
"responsavel": "joao.silva",
"cod_parceiro": 1001,
"notas": "Reunião mensal",
"meet_link": null
}
]
{
"titulo": "Visita ao parceiro",
"tipo": "visita",
"data_hora": "2024-09-15T10:00:00",
"cod_parceiro": 1001,
"notas": "Reunião mensal",
"criar_meet": false
}
visita · ligacao · reuniao · outro
criar_meet: true, cria automaticamente um link de reunião no Google Calendar do actor (requer integração Google configurada na conta).
200 {"ok": true, "id": N} 400 titulo ou data_hora ausente
200 {"ok": true} 404 Não encontrado 403 Sem permissão
Remove múltiplos eventos em uma única requisição.
{ "ids": [1, 2, 3] }
200 {"ok": true, "removidos": 3}
Retorna os tipos de evento e configurações de agenda disponíveis para o actor autenticado.
Fluxograma: Onboarding de Parceiro
Sequência recomendada para cadastrar um novo parceiro e vinculá-lo à estrutura comercial.
Passo a passo
- Autentique-se —
POST /api/auth/loginpara obter o JWT. - Consulte a estrutura —
GET /api/estrutura-comercialpara obter os nomes exatos de superintendente, regional e comercial. - Cadastre o(s) parceiro(s) — use
POST /api/parceiros/json(array JSON) ouPOST /api/parceiros/importar(planilha .xlsx) para inserção em massa. - Verifique o vínculo — nos dados retornados, confirme que
estrutura_idnão énull. Se for, revise os campossuperintendente,regionalecomercial— devem corresponder exatamente aos valores da estrutura.
superintendente, regional e comercial são comparados sem distinção de maiúsculas/minúsculas, mas devem corresponder exatamente ao nome cadastrado na estrutura. Espaços extras ou variações de grafia causarão falha no vínculo.
Fluxograma: Envio de Produção
Sequência recomendada para enviar dados de produção mensal de parceiros.
Passo a passo
- Autentique-se —
POST /api/auth/loginpara obter o JWT. - Escolha o formato:
- JSON simples — array de registros com
cod_parceiro,mes_ref,produto,valor_bruto,quantidade. UsePOST /api/producao. - JSON agrupado — cada objeto agrupa múltiplos produtos de um parceiro/mês. Use
POST /api/producao-parceiro/json. - Planilha Excel — envie via
POST /api/producao/upload-excelcommultipart/form-data.
- JSON simples — array de registros com
- Verifique a resposta — confirme
"ok": truee o campoprocessadosbate com o número de registros enviados.
cod_parceiro + mes_ref + produto) são atualizados, não duplicados. É seguro re-enviar um período já processado.