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.
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.
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.
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.
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.
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.
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.
Envie as credenciais para POST /auth/token. A API retorna um access_token JWT válido por 5 minutos (300 segundos).
Inclua o token em todas as requisições no header:Authorization: Bearer {access_token}
Monitore o campo expires_in. Renove o token antes da expiração chamando POST /auth/token novamente. Implemente retry em caso de 401.
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 }
GET /v1/catalogs Authorization: Bearer eyJhbGciOiJSUzI1NiIs... Content-Type: application/json
Visão geral de todos os endpoints disponíveis na API.
| Método | Endpoint | Descrição | Grupo |
|---|---|---|---|
| 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 |
Detalhamento dos payloads de request e response de cada endpoint.
Request Body
| Campo | Tipo | Descrição |
|---|---|---|
| client_id | string | Identificador do cliente |
| client_secret | string | Chave secreta do cliente |
Response (200)
| Campo | Tipo | Descrição |
|---|---|---|
| access_token | string | Token JWT para autenticação |
| token_type | string | Sempre "Bearer" |
| expires_in | integer | Tempo de vida em segundos |
Query Parameters
| Param | Tipo | Descrição |
|---|---|---|
| page | integer | Página (padrão: 1, máx 25/página) |
Response (200) — cada item em data
| Campo | Tipo | Descrição |
|---|---|---|
| id | uuid | Identificador único do catálogo |
| name | string | Nome do catálogo |
| created_at | datetime | Data de criação (UTC) |
Request Body
| Campo | Tipo | Descrição |
|---|---|---|
| process_id | uuid | ID do processo que receberá o arquivo |
| file_name | string | Nome do arquivo com extensão (máx 255 chars) |
Response (201)
| Campo | Tipo | Descrição |
|---|---|---|
| file_id | uuid | ID único do arquivo registrado |
| upload_url | uri | URL pré-assinada para upload via PUT (expira em 15 min) |
| upload_url_expires_at | datetime | Expiração da URL (UTC) |
| created_at | datetime | Data de criação do registro (UTC) |
Query Parameters
| Param | Tipo | Descrição |
|---|---|---|
| process_id | uuid | ID do processo |
| page | integer | Página (padrão: 1, máx 25/página) |
Response (200) — cada item em data
| Campo | Tipo | Descrição |
|---|---|---|
| file_id | uuid | Identificador único do arquivo |
| file_name | string | Nome do arquivo |
| size_bytes | int64 | Tamanho em bytes (nullable) |
| status | enum | pending · processing · completed · failed · partial |
| uploaded_at | datetime | Data do upload (UTC, nullable) |
Request Body (todos opcionais)
| Campo | Tipo | Descrição |
|---|---|---|
| catalog_ids | uuid[] | IDs dos catálogos (omitir = global) |
| scheduled_at | datetime | Agendamento (omitir = imediato) |
Response (202)
| Campo | Tipo | Descrição |
|---|---|---|
| processing_id | uuid | ID da solicitação de processamento |
| catalog_ids | uuid[] | Catálogos específicos (null se global) |
| scheduled_at | datetime | Agendamento (nullable) |
| created_at | datetime | Data de criação (UTC) |
Request Body (opcional)
| Campo | Tipo | Descrição |
|---|---|---|
| catalog_ids | uuid[] | IDs dos catálogos (omitir = todos os SKUs) |
Response (202)
| Campo | Tipo | Descrição |
|---|---|---|
| export_id | uuid | ID da exportação |
| catalog_ids | uuid[] | Catálogos filtrados (null se global) |
| created_at | datetime | Data de criação (UTC) |
Path Parameters
| Param | Tipo | Descrição |
|---|---|---|
| exportId | uuid | ID da exportação |
Response (200)
| Campo | Tipo | Descrição |
|---|---|---|
| export_id | uuid | ID da exportação |
| status | enum | PROCESSING · COMPLETED · FAILED |
| catalog_ids | uuid[] | Catálogos filtrados (nullable) |
| total_skus | integer | Qtd de SKUs (quando COMPLETED) |
| created_at | datetime | Data de criação (UTC) |
| completed_at | datetime | Data de conclusão (nullable) |
| download_url | uri | URL para download do CSV (expira em 60 min, nullable) |
| download_url_expires_at | datetime | Expiração da URL (nullable) |
Colunas presentes no arquivo CSV retornado pela exportação de parâmetros. Cada linha representa um SKU.
| Coluna | Tipo | Descrição | Exemplo |
|---|---|---|---|
| sku_code | string | Código da SKU no sistema do cliente | MAT-001234 |
| site | string | Site / localidade / planta da SKU | SP-01 |
| unique_id | string | Identificador único no Panorama Navigator | uid-a1b2c3d4e5 |
| portfolio | enum | Estratégia ativa de armazenagem da SKU on-demand anticipated | on-demand |
| lead_time | integer | Lead time vigente (em dias) | 14 |
| lead_time_provider | integer | Lead time do fornecedor (em dias) | 7 |
| lead_time_procurement | integer | Lead time do processo de compras (em dias) | 5 |
| lead_time_analyst | integer | Lead time do processo de análise (em dias) | 2 |
| service_level | float | Nível de serviço requerido (%) | 95.0 |
| trigger | float | Gatilho de reposição (em unidades) | 250.0 |
| lot | float | Tamanho do lote de reposição (em unidades) | 500.0 |
| security_balance | float | Estoque de segurança da SKU (em unidades) | 15.0 |
| maximum | float | Nível máximo de estoque | 1200.0 |
| minimum | float | Nível mínimo de estoque | 150.0 |
Respostas de erro seguem o formato padrão { "error": { "code", "message", "details" } }
| HTTP | Código | Descrição |
|---|---|---|
| 400 | VALIDATION_ERROR | Dados inválidos na requisição |
| 401 | UNAUTHORIZED | Token ausente, expirado ou inválido |
| 401 | INVALID_CREDENTIALS | Credenciais de autenticação inválidas |
| 403 | FORBIDDEN | Sem permissão para acessar o recurso |
| 404 | PROCESS_NOT_FOUND | Processo não encontrado |
| 404 | CATALOG_NOT_FOUND | Catálogo não encontrado |
| 429 | RATE_LIMIT_EXCEEDED | Limite de requisições excedido |