API Externa SEAC

Guia de integração — https://seac-api.seacweb.com.br

API 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:

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

AmbienteURL base
Produçãohttps://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.

HTTPQuando ocorre
401Token ausente ou inválido.
403Token válido, mas sem permissão para aquela entidade/relatório. Solicite liberação à EXATA.
503Serviço de autenticação indisponível no momento — tente novamente.
Trate o token como segredo. Se precisar trocá-lo, fale com a EXATA.

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âmetroPadrãoDescrição
limit50Registros por página.
page1Nú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 URLSignificadoExemplo
campo=valorigual?person_type=1
campo>=valormaior ou igual?updated_at>=2026-05-01 08:00:00
campo<=valormenor ou igual?sell_price<=5000
campo!=valordiferente?status!=CANCELADO
campo>valor / campo<valorsem “=” na URL o operador é inclusivo (≥ / ≤)?id>1000

Regras:

# 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

sortNome do campo (sem ponto).
dirASC (padrão) ou DESC.

Erros

HTTPmessageO que fazer
401Token not provided / Invalid tokenRevise o header Authorization.
403Permission denied for entity/procedure: <x>Peça liberação do recurso à EXATA.
404Route 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.
503Serviço de autenticação temporariamente indisponívelRepita 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"
Cada entidade retorna o que o SEAC classifica naquela categoria. Ex.: 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.

EntidadeConteúdoCampos (JSON)
clientClientes (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
personClientes pessoa física.id, first_name, last_name, document.*, cpf, address.*, phone, cellphone, email
legalpersonClientes pessoa jurídica.id, name, trade_name, ie, cnpj, address.*, phone, cellphone, email, email_nfe
providerFornecedores.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
employeeColaboradores (qualquer área).id, name, cpf, company_id, street, district, city_id, state_id, zip_code, phone, email, birthdate, created_at, updated_at
sellerColaboradores da área de vendas (Vendedor).id, name, company.id, updated_at
professionalProfissionais / 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
companyEmpresa(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
productProdutos 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_pricePreço de venda por loja.id, id_store, sell_price, updated_at
stockEstoque por loja.id, id_store, stocks_quantity, updated_at
imageImagens de produto.id (ean), product_id, image_id, filename, order, updated_at
product_attributeAtributos/variações de produto (e-commerce).id, attribute_name, variation_name, attribute_id, variation_id, updated_at
brand / color / group / subgroup / control / unit / voltageCatálogos auxiliares de produto.id (ou abbreviation), name, created_at, updated_at
city / state / country / districtLocalidades (códigos IBGE).id, name, (state_id / abbreviation / city.id…)
payment_methodFormas de pagamento.id, name
payment_planPlanos/condições de pagamento.id, name, discount, installments, payment_method.id, level_account.id, company.id, updated_at
sale_masterVendas (cabeçalho).operation_code, datetime, number, client.id, store.id, total_value, discount, shipping_value, net_value, payment_plan.id
sale_detailItens de venda.sale_master.operation_code, product.id, quantity, price
proposal_masterOrç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_detailItens 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
cashierMovimentações de caixa.id, status, created_at, client.person.cpf, client.person.name
delivery_status / delivery_eventStatus 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

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âmetroDescrição
_temp_tableSempre relatorio_final_temp.
p_tipo_relatorioSINTETICO ou ANALITICO.
p_dataI, p_dataFPeríodo (AAAA-MM-DD).
p_group_by_keyChave principal de agrupamento: vendedor, cliente, profissional, grupo, subgrupo, cidade, loja, fornecedor, controle.
p_group_by_secundario1 … 9Quebras adicionais (mesmos valores).
p_loja, p_vendedor, p_profissional, p_grupo, p_subgrupo, p_cliente, p_controleFiltro por ID. 0 ou vazio = todos.
p_comissao1 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).