API Documentation

Panorama Navigator
API de Integração de Dados

Automatize a troca de informações entre o ERP da sua empresa e a plataforma Panorama Navigator. Envie dados, acompanhe processamentos e exporte os parâmetros calculados pelo algoritmo de otimização.

Versão 1.3.3
Base URL https://navigator-api.siopanorama.com/v1
Formato JSON / CSV

Introdução

Esta API permite a automação completa da troca de informações — ida e volta — entre o sistema ERP da empresa cliente e o Panorama Navigator.

📁

Troca de Arquivos

A integração ocorre por meio de troca de arquivos. A empresa envia arquivos com dados do ERP (transações, pedidos, cadastro de materiais) e, ao final do processamento, exporta os parâmetros calculados em formato CSV para atualizar seu ERP.

⚙️

Processos Dedicados

Cada tipo de arquivo da empresa possui um processo dedicado que realiza todas as traduções e transformações necessárias para adequar os dados ao formato do Panorama Navigator. Se a empresa tem 6 tipos de arquivo, são 6 processos configurados.

🔧

Configuração no SETUP

Os processos específicos de cada empresa são construídos pela equipe da SIO Panorama durante o período de SETUP da integração, garantindo total compatibilidade com os dados do cliente.


Autenticação & Segurança

A API utiliza autenticação baseada em tokens JWT com expiração curta. O sistema cliente deve obter um token antes de realizar qualquer operação e renová-lo automaticamente antes da expiração.

1

Onboarding

Durante a integração, a equipe da SIO Panorama fornece as credenciais client_id e client_secret exclusivas da sua empresa. Guarde-as com segurança.

2

Obter Token

Envie as credenciais para POST /auth/token. A API retorna um access_token JWT válido por 5 minutos (300 segundos).

3

Usar o Token

Inclua o token em todas as requisições no header:
Authorization: Bearer {access_token}

4

Renovação Automática

Monitore o campo expires_in. Renove o token antes da expiração chamando POST /auth/token novamente. Implemente retry em caso de 401.

Exemplo — Obtendo o Token
POST /v1/auth/token
Content-Type: application/json

{
  "client_id": "minha-empresa",
  "client_secret": "s3cr3t-k3y-abc123"
}

── Resposta (200 OK) ──

{
  "access_token": "eyJhbGciOiJSUzI1NiIs...",
  "token_type": "Bearer",
  "expires_in": 300
}
Exemplo — Usando o Token
GET /v1/catalogs
Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
Content-Type: application/json

Endpoints

Visão geral de todos os endpoints disponíveis na API.

MétodoEndpointDescriçãoGrupo
POST /auth/token Obter token de acesso JWT Auth
GET /catalogs Listar catálogos da empresa Catálogos
POST /files/upload-url Solicitar URL para upload de arquivo Arquivos
GET /files Listar arquivos de um processo Arquivos
POST /processing Solicitar execução do processamento Processamento
POST /parameters/exports Solicitar exportação de parâmetros Parâmetros
GET /parameters/exports/{exportId} Consultar status e baixar exportação Parâmetros

Estruturas de Dados

Detalhamento dos payloads de request e response de cada endpoint.

POST /auth/token

Request Body

CampoTipoDescrição
client_id stringIdentificador do cliente
client_secret stringChave secreta do cliente

Response (200)

CampoTipoDescrição
access_tokenstringToken JWT para autenticação
token_typestringSempre "Bearer"
expires_inintegerTempo de vida em segundos

GET /catalogs

Query Parameters

ParamTipoDescrição
pageintegerPágina (padrão: 1, máx 25/página)

Response (200) — cada item em data

CampoTipoDescrição
iduuidIdentificador único do catálogo
namestringNome do catálogo
created_atdatetimeData de criação (UTC)

POST /files/upload-url

Request Body

CampoTipoDescrição
process_id uuidID do processo que receberá o arquivo
file_name stringNome do arquivo com extensão (máx 255 chars)

Response (201)

CampoTipoDescrição
file_iduuidID único do arquivo registrado
upload_urluriURL pré-assinada para upload via PUT (expira em 15 min)
upload_url_expires_atdatetimeExpiração da URL (UTC)
created_atdatetimeData de criação do registro (UTC)

GET /files

Query Parameters

ParamTipoDescrição
process_id uuidID do processo
pageintegerPágina (padrão: 1, máx 25/página)

Response (200) — cada item em data

CampoTipoDescrição
file_iduuidIdentificador único do arquivo
file_namestringNome do arquivo
size_bytesint64Tamanho em bytes (nullable)
statusenumpending · processing · completed · failed · partial
uploaded_atdatetimeData do upload (UTC, nullable)

POST /processing

Request Body (todos opcionais)

CampoTipoDescrição
catalog_idsuuid[]IDs dos catálogos (omitir = global)
scheduled_atdatetimeAgendamento (omitir = imediato)

Response (202)

CampoTipoDescrição
processing_iduuidID da solicitação de processamento
catalog_idsuuid[]Catálogos específicos (null se global)
scheduled_atdatetimeAgendamento (nullable)
created_atdatetimeData de criação (UTC)

POST /parameters/exports

Request Body (opcional)

CampoTipoDescrição
catalog_idsuuid[]IDs dos catálogos (omitir = todos os SKUs)

Response (202)

CampoTipoDescrição
export_iduuidID da exportação
catalog_idsuuid[]Catálogos filtrados (null se global)
created_atdatetimeData de criação (UTC)

GET /parameters/exports/{exportId}

Path Parameters

ParamTipoDescrição
exportId uuidID da exportação

Response (200)

CampoTipoDescrição
export_iduuidID da exportação
statusenumPROCESSING · COMPLETED · FAILED
catalog_idsuuid[]Catálogos filtrados (nullable)
total_skusintegerQtd de SKUs (quando COMPLETED)
created_atdatetimeData de criação (UTC)
completed_atdatetimeData de conclusão (nullable)
download_urluriURL para download do CSV (expira em 60 min, nullable)
download_url_expires_atdatetimeExpiração da URL (nullable)

Estrutura do Arquivo CSV Exportado

Colunas presentes no arquivo CSV retornado pela exportação de parâmetros. Cada linha representa um SKU.

SKU Parameters — Colunas do CSV

ColunaTipoDescriçãoExemplo
sku_codestringCódigo da SKU no sistema do clienteMAT-001234
sitestringSite / localidade / planta da SKUSP-01
unique_idstringIdentificador único no Panorama Navigatoruid-a1b2c3d4e5
portfolioenumEstratégia ativa de armazenagem da SKU   on-demand anticipatedon-demand
lead_timeintegerLead time vigente (em dias)14
lead_time_providerintegerLead time do fornecedor (em dias)7
lead_time_procurementintegerLead time do processo de compras (em dias)5
lead_time_analystintegerLead time do processo de análise (em dias)2
service_levelfloatNível de serviço requerido (%)95.0
triggerfloatGatilho de reposição (em unidades)250.0
lotfloatTamanho do lote de reposição (em unidades)500.0
security_balancefloatEstoque de segurança da SKU (em unidades)15.0
maximumfloatNível máximo de estoque1200.0
minimumfloatNível mínimo de estoque150.0

Códigos de Erro

Respostas de erro seguem o formato padrão { "error": { "code", "message", "details" } }

HTTPCódigoDescrição
400VALIDATION_ERRORDados inválidos na requisição
401UNAUTHORIZEDToken ausente, expirado ou inválido
401INVALID_CREDENTIALSCredenciais de autenticação inválidas
403FORBIDDENSem permissão para acessar o recurso
404PROCESS_NOT_FOUNDProcesso não encontrado
404CATALOG_NOT_FOUNDCatálogo não encontrado
429RATE_LIMIT_EXCEEDEDLimite de requisições excedido