Pular para o conteúdo

Documentação API SisOp

Documentação API SisOp

Por Heron Rangel
Publicado em 29 de janeiro de 2026 – Atualizado em 23 de outubro de 2026

Collection Postman

Faça o download da collection do Postman abaixo:

Introdução

A API SysOp expõe três endpoints. Todos recebem requisições POST com corpo em JSON e exigem autenticação por token — veja a seção Autenticação abaixo.

/api/db — executa uma instrução SQL, seja para consultar dados ou para alterá-los.
/api/script — executa uma lista de instruções SQL em sequência, como um script.
/api/anx — consulta anexos. É o único em que a instrução SQL não é enviada por você: a API a monta a partir das propriedades informadas.

Toda resposta traz informações sobre a instalação nos headers:

x-api-versao — Versão da API.
x-api-total — Quantidade de registros retornados pela query.
x-api-driver — Driver utilizado para o acesso ao banco de dados.
x-api-escopo — Modo de operação da API: read-only (somente leitura) ou read-write (leitura e gravação), conforme a configuração da instalação.

Quando o escopo é read-only, consultas continuam funcionando, mas comandos de INSERT, UPDATE e DELETE são recusados com a mensagem: “A API está configurada em modo somente leitura. Para realizar alterações nos dados, habilite a permissão de gravação nas configurações da API.”

				
					# A opção -i exibe os headers da resposta junto com o corpo
curl -i -X POST "http://SEU_SERVIDOR:PORTA/api/db" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -d '{"query":"SELECT * FROM t_0;"}'

# Headers retornados
HTTP/1.1 200 OK
Content-Type: application/json
x-api-versao: 300126
x-api-driver: Microsoft ACE OLEDB 12 (OLEDB)
x-api-escopo: read-write
x-api-total: 1

				
			

Autenticação

Os endpoints da API SysOp exigem autenticação por token JWT. Requisições enviadas sem token, ou com token inválido ou expirado, são recusadas com status 401.

O processo tem duas etapas: primeiro o token é obtido no endpoint /api/auth/login; depois ele é enviado no header Authorization de todas as demais requisições.

1. Obtendo o token

Envie uma requisição POST para /api/auth/login, com Content-Type: application/json e as credenciais no corpo. O usuário e a senha são fornecidos pela SysOpRS no momento da contratação.

				
					POST /api/auth/login HTTP/1.1
Host: SEU_SERVIDOR:PORTA
Content-Type: application/json

{
  "usuario": "SEU_USUARIO",
  "senha": "SUA_SENHA"
}

				
			

Com credenciais válidas, a resposta vem com status 200 e o token no corpo:

				
					{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "expires_in": 3600,
  "expires_at": "2026-10-23T17:35:12.4821376Z"
}

				
			

access_token — o token que deve ser enviado nas demais requisições.
expires_in — validade do token em segundos (3600 = 1 hora).
expires_at — data e hora em UTC em que o token expira.

Credenciais incorretas retornam status 401, sem corpo na resposta.

2. Enviando o token nas requisições

O token é enviado no header Authorization, precedido da palavra Bearer e de um espaço — o padrão Bearer Token. Vale para /api/db, /api/script e /api/anx, e os headers já existentes continuam os mesmos.

				
					POST /api/db HTTP/1.1
Host: SEU_SERVIDOR:PORTA
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

{
  "query": "SELECT codigo, nome FROM usuarios"
}

				
			

O mesmo fluxo, das duas etapas, usando cURL:

				
					# 1. Obter o token
curl -X POST "http://SEU_SERVIDOR:PORTA/api/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"usuario":"SEU_USUARIO","senha":"SUA_SENHA"}'

# 2. Usar o token na requisição
curl -X POST "http://SEU_SERVIDOR:PORTA/api/db" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -d '{"query":"SELECT codigo, nome FROM usuarios"}'

				
			

3. Validade e erros

O token é válido por 1 hora. Depois desse prazo é necessário chamar /api/auth/login novamente para obter um novo token — não existe endpoint de renovação (refresh). Recomenda-se obter o token uma vez e reaproveitá-lo durante a sessão, renovando-o apenas quando expirar.

Requisições sem o header Authorization, ou com token inválido ou expirado, retornam status 401 com o corpo abaixo:

				
					{
  "message": "Token inválido ou expirado. Por favor, forneça um token válido."
}

				
			

Endpoint /api/db

O corpo da requisição tem uma propriedade obrigatória: query (string), onde vai a instrução SQL a ser executada.

O retorno depende do tipo de instrução:

Um SELECT devolve os dados em JSON, com status 200, como no exemplo abaixo.
Um INSERT, UPDATE ou DELETE não tem dados para devolver: a resposta é um array vazio ([]), também com status 200. Ou seja, array vazio aqui significa sucesso, não ausência de resultados.

				
					curl -X POST "http://SEU_SERVIDOR:PORTA/api/db" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -d '{"query":"SELECT * FROM t_0;"}'

# Resposta — 200 OK
[
  {
    "ID1": 1,
    "razao": "Demonstração",
    "fantasia": "Demonstração",
    "CNPJ": "11111111111111"
  }
]

				
			

Há ainda a propriedade opcional callback, para quando você precisa de uma informação depois de executar o comando. As duas trabalham juntas: query executa, callback devolve o resultado.

O caso mais comum é inserir um registro e precisar saber o ID que o banco acabou de gerar — o INSERT vai em query e a consulta do ID em callback:

				
					curl -X POST "http://SEU_SERVIDOR:PORTA/api/db" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -d '{
        "query": "INSERT INTO t_0 VALUES...",
        "callback": "SELECT MAX(ID1) AS RETORNO FROM t_0"
      }'

# Resposta — 200 OK
[
  {
    "RETORNO": 1
  }
]

				
			

Endpoint /api/script

Aqui a propriedade é script (array de strings): uma lista de comandos SQL que o servidor executa um após o outro, na ordem informada.

Dando tudo certo, a resposta é sempre {"message": "OK"} com status 200 — este endpoint não devolve dados, mesmo que algum comando da lista seja um SELECT.

				
					curl -X POST "http://SEU_SERVIDOR:PORTA/api/script" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -d '{
        "script": [
          "DELETE FROM tabela...",
          "INSERT INTO tabela VALUES...",
          "UPDATE tabela SET..."
        ]
      }'

# Resposta — 200 OK
{
  "message": "OK"
}

				
			

Se um dos comandos falhar, a execução para imediatamente naquele ponto e a resposta é status 500 com a descrição do erro. Atenção: os comandos executados antes da falha não são desfeitos — a lista não roda dentro de uma transação. Cabe a você reverter o que for necessário.

				
					{
  "message": "Erro de sintaxe na consulta. Cláusula de consulta incompleta."
}

				
			

Endpoint /api/anx

O endpoint /api/anx é utilizado para consultar os anexos.

As propriedades aceitas no corpo da requisição são:

tabela — string. Nome da tabela de anexos a ser consultada.
criterio — string, opcional. Condição de filtro, aplicada como cláusula WHERE. Se omitida, nenhum filtro é aplicado.
top — inteiro, opcional. Limita a quantidade de registros retornados. O padrão é 500.

Como os demais endpoints, exige o header Authorization.

				
					curl -X POST "http://SEU_SERVIDOR:PORTA/api/anx" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -d '{
        "tabela": "Anexos",
        "criterio": "ID1 = 1",
        "top": 10
      }'

# Resposta — 200 OK (as colunas variam conforme a tabela consultada)
[
  {
    "ID": 1,
    "ID1": 1,
    "Nome": "contrato.pdf",
    "Anexo": "H4sIAAAAAAAACk1Ry07DMBD8lT1x..."
  }
]

				
			

A coluna Anexo, quando presente, é devolvida comprimida em GZip e codificada em Base64 — o conteúdo precisa ser decodificado e descomprimido no lado do cliente antes de ser utilizado.

Neste endpoint, o header x-api-total traz o total de registros existentes na tabela, desconsiderando o criterio e o top — diferente de /api/db, onde ele indica a quantidade de registros retornados pela consulta.

Os registros são ordenados por ID, portanto a tabela consultada precisa possuir essa coluna. Em caso de falha, a resposta é status 500 com a descrição do erro na propriedade message.

Formatações

A instrução SQL viaja dentro de um JSON, e aspas duplas ou quebras de linha soltas quebrariam esse JSON. Para esses dois casos existem substitutos, que a API converte antes de executar a consulta:

_newline_ — vira uma quebra de linha.
chr(34) — vira uma aspa dupla (").

No exemplo abaixo, o nome fica entre aspas e a descrição ocupa duas linhas:

				
					INSERT INTO usuarios (nome, descricao) VALUES (chr(34)João Silvachr(34), chr(34)Linha 1_newline_Linha 2chr(34))

				
			

Heron Rangel

Desenvolvimento
Home
Ajuda!
Parceiros
Buscar
×

 

Olá! 😁

Selecione o contato que deseja iniciar a conversa!

×