API Externa SEAC
https://seac-api.seacweb.com.brAPI HTTP/JSON para consultar dados e relatórios do ERP SEAC. Esta página cobre o necessário para integrar. Última revisão: 10/09/2026.
Visão geral
A API expõe três grupos de recurso, todos com resposta JSON:
- Consulta de entidades —
GET /entity_getter/{entidade}: clientes, produtos, vendas, vendedores, formas de pagamento, etc. Listas paginadas, com filtro e ordenação por query string. - Relatórios —
GET|POST /report/{relatorio}: relatórios paramétricos (ex.: KPI de vendas, sintético ou analítico). - Webhooks — a API recebe eventos de sistemas parceiros (ex.: confirmação de pagamento de boleto).
Todos os recursos de dado exigem autenticação. O acesso é concedido pela EXATA por integração: cada token enxerga um conjunto específico de entidades/relatórios e os dados de uma empresa.
URL base
| Ambiente | URL base |
|---|---|
| Produção | https://seac-api.seacweb.com.br |
Health check público: GET /test → responde o texto Teste.
Autenticação
Envie o token fornecido pela EXATA no header Authorization, com o prefixo Bearer:
Authorization: Bearer SEU_TOKEN_AQUI
Envie o header em toda requisição de dado (inclusive nas de leitura). Requisições sem token, ou com token inválido, são rejeitadas.
| HTTP | Quando ocorre |
|---|---|
401 | Token ausente ou inválido. |
403 | Token válido, mas sem permissão para aquela entidade/relatório. Solicite liberação à EXATA. |
503 | Serviço de autenticação indisponível no momento — tente novamente. |
Estrutura da resposta
Lista:
{
"status": "success",
"meta": { "page": 1, "limit": 50, "total": 120, "pages": 3 },
"data": [ { "id": 1, "name": "..." }, { "id": 2, "name": "..." } ]
}
Busca por id (/entity_getter/{entidade}/{id}): quando encontra 1 registro, data vem como objeto; quando não encontra, data vem como {}.
Erro:
{ "status": "error", "message": "descrição do erro" }
As respostas são UTF-8 (Content-Type: application/json; charset=utf-8) e podem vir comprimidas (gzip) se o cliente enviar Accept-Encoding: gzip.
Paginação
| Parâmetro | Padrão | Descrição |
|---|---|---|
limit | 50 | Registros por página. |
page | 1 | Número da página (começa em 1). |
meta.total considera os filtros aplicados; meta.pages é o total de páginas.
GET /entity_getter/client?page=2&limit=20
Filtros & operadores
Qualquer parâmetro de query que corresponda a um campo do resultado é usado como filtro. Além da igualdade, há operadores de comparação:
| Na URL | Significado | Exemplo |
|---|---|---|
campo=valor | igual | ?person_type=1 |
campo>=valor | maior ou igual | ?updated_at>=2026-05-01 08:00:00 |
campo<=valor | menor ou igual | ?sell_price<=5000 |
campo!=valor | diferente | ?status!=CANCELADO |
campo>valor / campo<valor | sem “=” na URL o operador é inclusivo (≥ / ≤) | ?id>1000 |
Regras:
- O nome do campo aceita apenas letras, números e
_. Campos cujo nome contenha ponto (ex.:company.id,client.person.name) não podem ser usados como filtro nem emsort. - Filtros se combinam com
AND. Não háOR,LIKEouINpor query string. - Para intervalo, use os dois limites:
?vl_total>=500&vl_total<=2000. - Datas:
AAAA-MM-DDouAAAA-MM-DD HH:MM:SS.
# produtos alterados a partir de uma data, ordenados por id desc, 20 por página
GET /entity_getter/product?updated_at>=2026-08-01&sort=id&dir=DESC&limit=20
Ordenação
sort | Nome do campo (sem ponto). |
dir | ASC (padrão) ou DESC. |
Erros
| HTTP | message | O que fazer |
|---|---|---|
| 401 | Token not provided / Invalid token | Revise o header Authorization. |
| 403 | Permission denied for entity/procedure: <x> | Peça liberação do recurso à EXATA. |
| 404 | Route not found / entity not found. | Confira o nome do recurso na URL. |
| 500 | <mensagem do servidor> | Normalmente um filtro por campo inexistente. Revise os parâmetros; se persistir, contate a EXATA. |
| 503 | Serviço de autenticação temporariamente indisponível | Repita a chamada em alguns instantes. |
Consulta de dados — GET /entity_getter
GET/entity_getter/{entidade} — lista paginada/filtrada
GET/entity_getter/{entidade}/{id} — um registro pelo campo id
curl -H "Authorization: Bearer SEU_TOKEN" \
"https://seac-api.seacweb.com.br/entity_getter/client?limit=50&page=1"
seller traz colaboradores cuja área de atuação no cadastro é Vendedor — um colaborador cadastrado como “Promotor” aparece em employee, não em seller. Se um registro esperado não vier, o mais comum é classificação divergente no cadastro do ERP; fale com a EXATA.Entidades disponíveis
A disponibilidade de cada entidade depende da liberação do seu token. Campos com ponto no nome (company.id…) não servem para filtro/sort.
| Entidade | Conteúdo | Campos (JSON) |
|---|---|---|
client | Clientes (PF e PJ). | id, name, trade_name, person_type, cpf_cnpj, rg_ie, address, number, complement, district, city_id, state_id, zipcode, phone, cellphone, email, email_nfe, birthdate, created_at, updated_at |
person | Clientes pessoa física. | id, first_name, last_name, document.*, cpf, address.*, phone, cellphone, email |
legalperson | Clientes pessoa jurídica. | id, name, trade_name, ie, cnpj, address.*, phone, cellphone, email, email_nfe |
provider | Fornecedores. | id, name, trade_name, person_type, cpf_cnpj, rg_ie, street, number, complement, district, city_id, state_id, zip_code, phone, email, email_nfe, site, created_at, updated_at |
employee | Colaboradores (qualquer área). | id, name, cpf, company_id, street, district, city_id, state_id, zip_code, phone, email, birthdate, created_at, updated_at |
seller | Colaboradores da área de vendas (Vendedor). | id, name, company.id, updated_at |
professional | Profissionais / especificadores cadastrados (arquitetos, engenheiros, designers, etc.). | id, company.id, name, cpf, street, district, city.id, city.name, state.id, state.abbreviation, zip_code, phone, email, birthdate, commission_rate, updated_at |
company | Empresa(s) / lojas. | id, name, trade_name, internal_name, contact, cnpj, ie, street, number, complement, district, city_id, zip_code, email, site, phone, created_at, updated_at |
product | Produtos publicados para venda externa. | id, name, ean, reference, unit.abbreviation, sell_price, provider.id, group.id, subgroup.id, control.id, brand.id, color.id, factor, weight, information, ncm, cest, tag, height, width, depth, created_at, updated_at |
sell_price | Preço de venda por loja. | id, id_store, sell_price, updated_at |
stock | Estoque por loja. | id, id_store, stocks_quantity, updated_at |
image | Imagens de produto. | id (ean), product_id, image_id, filename, order, updated_at |
product_attribute | Atributos/variações de produto (e-commerce). | id, attribute_name, variation_name, attribute_id, variation_id, updated_at |
brand / color / group / subgroup / control / unit / voltage | Catálogos auxiliares de produto. | id (ou abbreviation), name, created_at, updated_at |
city / state / country / district | Localidades (códigos IBGE). | id, name, (state_id / abbreviation / city.id…) |
payment_method | Formas de pagamento. | id, name |
payment_plan | Planos/condições de pagamento. | id, name, discount, installments, payment_method.id, level_account.id, company.id, updated_at |
sale_master | Vendas (cabeçalho). | operation_code, datetime, number, client.id, store.id, total_value, discount, shipping_value, net_value, payment_plan.id |
sale_detail | Itens de venda. | sale_master.operation_code, product.id, quantity, price |
proposal_master | Orçamentos (cabeçalho) — abertos, aceitos e recusados. | id, datetime, store_id, client_id, employee_id, professional_id, payment_plan_id, status_id, status_name, refusal_reason_id, valid_until, expected_delivery, customer_pickup, total_value, discount, shipping_value, net_value, closed_at, created_at, updated_at |
proposal_detail | Itens do orçamento. | proposal_id, item, product_id, ean, reference, name, unit_abbreviation, quantity, price, list_price, discount, total_value, net_value, expected_delivery, updated_at |
cashier | Movimentações de caixa. | id, status, created_at, client.person.cpf, client.person.name |
delivery_status / delivery_event | Status e histórico de entrega por operação. | id (op_codigo), status_id, status_description, event_date, event_description… |
Orçamentos — proposal_master / proposal_detail
- Situação:
status_id=0aberto (open),1aceito — virou venda (accepted),2recusado (refused). Para listar só os abertos:?status_id=0. No recusado,refusal_reason_idtraz o motivo. - Itens de um orçamento:
GET /entity_getter/proposal_detail?proposal_id=<id>(oiddoproposal_master). - Valores do cabeçalho:
total_value(bruto dos itens) −discount+shipping_value=net_value. - Valores do item:
priceé o preço unitário;discounté o desconto da linha inteira;total_value=quantity×price;net_value=total_value−discount. - Sincronização incremental:
?updated_at>=2026-10-01 00:00:00.
Precisa de uma entidade ou campo que não está aqui? Fale com a EXATA — dá para incluir/ajustar.
Relatórios — GET /report
GET / POST/report/{relatorio}
Passe os parâmetros do relatório na query string (mesmos nomes documentados abaixo). Relatórios que gravam o resultado numa tabela temporária exigem o parâmetro _temp_table (o valor é informado junto com a documentação do relatório). O resultado é paginado (limit/page) e aceita os mesmos filtros/operadores do entity_getter sobre as colunas de saída.
KPI de vendas — sp_gerar_kpi_venda
Indicadores de venda no período, em visão sintética (agregada pelas chaves de agrupamento) ou analítica (linha a linha).
GET /report/sp_gerar_kpi_venda
?_temp_table=relatorio_final_temp
&p_tipo_relatorio=ANALITICO # ou SINTETICO
&p_dataI=2026-08-01
&p_dataF=2026-08-31
&p_group_by_key=vendedor # chave principal
&p_group_by_secundario1=grupo # até 9 quebras adicionais
&p_comissao=0 # 1 = calcula comissão/premiação
&limit=50&page=1
| Parâmetro | Descrição |
|---|---|
_temp_table | Sempre relatorio_final_temp. |
p_tipo_relatorio | SINTETICO ou ANALITICO. |
p_dataI, p_dataF | Período (AAAA-MM-DD). |
p_group_by_key | Chave principal de agrupamento: vendedor, cliente, profissional, grupo, subgrupo, cidade, loja, fornecedor, controle. |
p_group_by_secundario1 … 9 | Quebras adicionais (mesmos valores). |
p_loja, p_vendedor, p_profissional, p_grupo, p_subgrupo, p_cliente, p_controle | Filtro por ID. 0 ou vazio = todos. |
p_comissao | 1 calcula comissão e premiação (e considera os recebimentos do período). |
Colunas — SINTETICO
Coluna(s) de agrupamento escolhidas + Venda Líquida(R$), Venda Bruta(R$), Devolução(R$), Devolução(%), Operações, Ticket Médio, Itens por Nota, CMV (%), Desconto Extra (%), Markup (%), Total Clientes, Novos Clientes, Total Profissionais, Novos Profissionais, Comissão(R$), Premiação(R$), Frete(R$), Qtd Movimentada.
Colunas — ANALITICO
Tipo (Venda / Devolução / Recebimento / Contratos), Operação, Data, coluna(s) de agrupamento, ID Loja, ID Vendedor, ID Profissional, ID Cliente, ID Grupo, ID Subgrupo, ID Fornecedor, ID Controle, Venda Líquida(R$), Venda Bruta(R$), Devolução(R$), Custo(R$), Desconto Extra(R$), ID Produto, Qtd Movimentada, Comissão(R$), Premiação(R$), Frete(R$).
Qtd Movimentada: quantidade do item na operação (negativa nas devoluções, para o sintético abater corretamente).
Webhooks
A API recebe notificações de sistemas parceiros. Hoje:
POST/webhook/boleto_pago — confirmação de pagamento de boleto (disparado pelo módulo de boletos da EXATA).
Requer Authorization: Bearer <token> + header X-Webhook-Signature: sha256=<hmac> (HMAC-SHA256 do corpo cru, usando o próprio token como segredo). Corpo: envelope { "event": "bankslip.paid", "sent_at": "...", "data": { "account", "our_number", "value", "paid_value", "interest", "discount", "due_date", "paid_at", "credit_date", "payer_name" } }. Responde 200 com data.status = baixado / nao_encontrado / ignorado. Contrato completo sob demanda.
POST/webhook/aviso — aviso genérico (encaminhado como notificação WhatsApp).