Instruções para Utilização da API de acesso aos dados do ERP Spalla

1. INTRODUÇÃO


Esta documentação tem como finalidade prover informações sobre a forma de acesso aos dados do SPALLA por meio da API e integração.

2. URL BASE

A API deve ser instalada no servidor do cliente como um serviço do SPALLA, para isto deve-se atribuir as configurações da BASE DE DADOS de integração, a Porta de Comunicação e o Tipo de Protocolo de Transferência a ser utilizado nas requisições sendo eles HTTP ou HTTPS.

A Url Base da API possui a seguinte estrutura

Protocolo Endereço Porta Path Raiz
https api.apelido.spalla.app 443 /root

Exemplo de URL Base da API:

URL Completa da API:
https://api.apelido.spalla.app:443/root

Observação: os endereços, portas e tokens utilizados nesta documentação são exemplos genéricos. Substitua api.apelido.spalla.app, a porta e o token <SEU_TOKEN_AQUI> pelos valores reais fornecidos para a sua instalação do SPALLA.

Estrutura da URL:


# Formato Geral
https://api.apelido.spalla.app:55002/root

# URL Base (sem o path /root)
https://api.apelido.spalla.app:443

# Observação:
# - Quando a porta é 443 (HTTPS padrão) ou 80 (HTTP padrão), ela não aparece na URL
# - Exemplos: https://api.apelido.spalla.app/root (porta 443 implícita)

3. ENDPOINTS COM AUTENTICAÇÃO


A API Spalla oferece duas formas independentes de autenticação. Escolha apenas uma; elas não são combinadas na mesma requisição.

Forma Como funciona Validade Quando usar
A) clientNonce + sessionSignature
(ver item 2)
Dois passos: (1) obter clientNonce com o login do usuário; (2) obter sessionSignature combinando clientNonce + senha. O sessionSignature é enviado em todas as requisições seguintes. Temporária: expira em 5 minutos de inatividade. Após expirar é necessário gerar um novo sessionSignature. Aplicações que fazem login interativo com usuário e senha (ex.: app mobile Spalla, software que exige autenticação por sessão).
B) userToken
(ver item 3)
Chave permanente cadastrada para um usuário específico de integração. Enviada em cada requisição via QueryParam ou HEADER. Permanente: não expira por tempo. Só perde validade se for revogada/substituída manualmente no cadastro do usuário de integração. Integrações máquina-a-máquina (sistemas terceiros, BI, ETL, automações). É a forma recomendada para integradores que rodam sem supervisão humana.

Em resumo:

A seguir, a documentação detalhada de cada uma.

clientNonce

Este endPoint fornece um ID único para que seja executada uma comunicação direta com os dados a aplicação SPALLA, ele deve ser executado sempre antes da autenticação para que seja possível obter o ID único de Autenticação que será utilizado no login.

O ClientNonce é um hash único gerado a partir de um valor aleatório e do login do usuário, ele é utilizado para garantir a segurança da comunicação entre o cliente e o servidor.

Tipo Parâmetro Descrição
Query UserName Login do Usuário Spalla

Exemplo:


# Exemplo de Requisição para Geração do ClientNonce

https://api.apelido.spalla.app:443/root/clientNonce?UserName=SUPORTE

Response:


{
    "result": "66f4966d5b78de54f0ffdcb9fd5b4db5c1a1e4012ebfb81ef343929e42b2c512"
}

SessionSignature

O SessionSignature é o método de autenticação da API, ele é gerado a partir do ClientNonce e do Password do usuário, ele é utilizado para assinar a sessão do usuário garantindo assim a autenticação do mesmo para a utilização dos demais endPoints.

A sessão de usuário assinada com o SessionSignature tem um tempo de expiração de 5 minutos em caso de inatividade, após este tempo é necessário gerar um novo SessionSignature.

Tipo Params Descrição
Query UserName Login do Usuário Mobile
Query PassWord Senha do Usuário Mobile
Query ClientNonce ClientNonce gerado na etapa anterior

Exemplo:


# Exemplo de Requisição para Geração do SessionSignature

https://api.apelido.spalla.app:443/Auth?UserName=SUPORTE&PassWord=123456&ClientNonce=66f4966d5b78de54f0ffdcb9fd5b4db5c1a1e4012ebfb81ef343929e42b2c512

Response:


{
    "usuario": "SUPORTE",
    "timeout": 60,
    "session_signature": "00021d4a4142ffd2993007e514df8005685ce05f6aae641e3df54ed7055ace6adc6a2a11"
}

3. ENDPOINTS COM CHAVE DE INTEGRAÇÃO


Para uma integração com aplicações de forma mais prática também disponibilizamos um endPoint um pouco mais simples que exige apenas o parâmetro userToken, este endPoint possui todos os recursos já disponibilizados porém existe apenas uma chave de acesso única que deve ser cadastrada para o usuário. Esta chave de acesso está vinculada a um usuário que será liberado para o integrador e estará vinculada a um conjunto de recursos que atender ao escopo da integração

O userToken pode ser informado tanto como QueryParam na requisição quanto no HEADER, sendo que caso exista a informação como QueryParam ela ignora o HEADER, e caso não exista ai ela passa a buscar pelo HEADER

Tipo Parâmetro Descrição
Query userToken Token de Acesso o Usuário da Integração
HEADER userToken Token de Acesso o Usuário da Integração

4. MÉTODOS


ATENÇÃO - ARQUITETURA UNIFICADA:

A API Spalla utiliza uma arquitetura de endpoint unificado. O método HTTP padrão para todas as requisições é PATCH. Para operações de gravação (POST, PUT, DELETE, PATCH no body JSON), o uso do método HTTP PATCH é obrigatório. Para operações de leitura (GET no body JSON), caso o software utilizado possua restrições quanto ao uso do método PATCH (ex: PowerBI), os métodos POST ou GET podem ser utilizados como alternativa.

O método HTTP informado na URL é independente da operação SQL a ser realizada. A operação real (consulta, inserção, atualização, exclusão ou execução de procedure) é determinada exclusivamente pelo campo "method" dentro do corpo JSON da requisição.

Como Funciona a Estrutura de Requisições

A API utiliza um conceito diferente do padrão REST tradicional. O método HTTP informado no cabeçalho da requisição não determina a operação que será executada no banco de dados. Em vez disso, a operação real é definida pelo campo "method" dentro do corpo JSON da requisição.

Estrutura Geral das Requisições:

Componente Descrição Exemplo
Método HTTP Padrão: PATCH (obrigatório para gravação). Para leitura, POST ou GET podem ser usados como alternativa em softwares com restrição ao PATCH (ex: PowerBI) PATCH
Endpoint Sempre o mesmo para todas as operações /root/integrador
Autenticação Via header userToken ou sessionSignature userToken: <SEU_TOKEN_AQUI>
Body JSON Contém o campo "method" com a operação SQL real { "method": "GET", ... }

Exemplo Visual da Arquitetura:


# EXEMPLO 1: Consulta de dados (leitura)
# O método HTTP padrão é PATCH. Para leitura, POST ou GET podem ser usados como alternativa

Requisição HTTP:
    Método HTTP: PATCH (padrão) ou POST/GET (alternativa para leitura)
    URL: https://api.apelido.spalla.app:443/root/integrador
    Header: userToken: <SEU_TOKEN_AQUI>
    Body: {
        "method": "GET",              <-- Método SQL (operação real)
        "objectType": "TABLE",
        "objectName": "CLIFOR"
    }

# EXEMPLO 2: Inserção de dados (gravação)
# Para gravação, o método HTTP PATCH é obrigatório

Requisição HTTP:
    Método HTTP: PATCH (obrigatório para gravação)
    URL: https://api.apelido.spalla.app:443/root/integrador
    Header: userToken: <SEU_TOKEN_AQUI>
    Body: {
        "method": "POST",             <-- Método SQL (operação real)
        "objectType": "TABLE",
        "objectName": "CLIFOR",
        "dataFields": [...]
    }

RESUMO IMPORTANTE:

Métodos SQL Disponíveis (Campo "method" no Body)

Abaixo segue a documentação dos métodos SQL que podem ser especificados no campo "method" do corpo JSON para acesso aos dados do SPALLA:

Método SQL Operação Objetos Suportados
GET Consulta de dados (SELECT) TABLE, VIEW, FUNCTION, PROCEDURE RESULT
POST Inserção de dados (INSERT) TABLE
PUT Atualização de dados (UPDATE) TABLE
DELETE Exclusão de dados (DELETE) TABLE
PATCH Execução de procedures e functions PROCEDURE, FUNCTION

Diferença entre PROCEDURE e PROCEDURE RESULT:

Tipos de Dados e Formatação de Valores

Regras para formatar os valores enviados em dataFields, params, where e having nos métodos POST, PUT, DELETE e PATCH. A API converte internamente todos os valores recebidos em texto antes de aplicar ao banco de dados.

Tipo no SAP SQL Anywhere Formato JSON aceito Exemplo
integer, numeric, decimal, float, double Número JSON ou string. Ponto como separador decimal. Sem separador de milhar. Sem símbolo de moeda. 1234 ou "1234.56"
date, timestamp, time String com data e hora. O separador depende de onde o valor vai: T em dataFields; espaço em where, having e params. Detalhes em Datas, Horas e Data/Hora. "2026-04-21T12:05:13" (gravação)
"2026-04-21 12:05:13" (filtro e parâmetro)
varchar, long varchar, char String JSON. "Texto qualquer"
long binary, binary (BLOB) String com o conteúdo em Base64. O objeto em dataFields deve incluir "fieldType": "ftBlob". { "name": "ARQUIVO", "fieldType": "ftBlob", "value": "U1BBTExB..." }
Valor nulo Literal JSON null ou string "NULL" (case-insensitive). null ou "NULL"

Observações importantes:

Datas, Horas e Data/Hora

Os três tipos de data do banco — date, timestamp e time — seguem a mesma regra. O que muda o formato não é o tipo da coluna, e sim onde o valor vai na requisição.

A regra, em duas linhas:

Nos dois casos, a hora é obrigatória, mesmo quando a coluna guarda só a data.

Onde o valor vai Formato Exemplo
dataFields (POST, PUT) AAAA-MM-DDTHH:MM:SS { "name": "DATA_EMISSAO", "value": "2026-04-21T12:05:13" }
where, having (GET, PUT, DELETE) AAAA-MM-DD HH:MM:SS { "type": "Field", "name": "DATA_EMISSAO", "value": "2026-04-21 12:05:13" }
params (GET de PROCEDURE RESULT e FUNCTION, PATCH de PROCEDURE) AAAA-MM-DD HH:MM:SS { "name": "P_DATA_INICIAL", "value": "2026-04-01 00:00:00" }

Coluna só de data ou só de hora

Envie sempre data e hora completas; o banco aproveita o que a coluna comporta. Numa coluna date, informe a meia-noite ("2026-04-21T00:00:00" na gravação, "2026-04-21 00:00:00" no filtro): a hora é descartada. Numa coluna time, informe a data do dia junto com a hora: a data é descartada. O mesmo vale para registrar apenas a data num campo timestamp: informe a meia-noite.

Datas devolvidas pela API

Nas respostas, a API devolve data e hora com T e milissegundos ("2026-04-21T12:05:13.000") e, quando a hora é meia-noite, só a data ("2026-04-21"). Esse valor não pode ser reenviado como veio. Para gravá-lo, acrescente "T00:00:00" quando vier só a data. Para usá-lo em where, having ou params, troque o T por espaço e, se vier só a data, acrescente " 00:00:00".

Formas que a API recusa

Forma O que acontece ao enviá-la
"2026-04-21T12:05:13" em where, having ou params Recusada com 400, com mensagem de erro de sintaxe ou de conversão de data. Use o espaço.
"2026-04-21 12:05:13" em dataFields Recusada com 400 e a mensagem '2026-04-21 12:05:13' is not a valid date and time. Use o T.
"2026-04-21" (data sem hora), em qualquer lugar Recusada com 400 e a mensagem Invalid class typecast. Em parâmetro de rotina o valor pode até ser aceito e registrar uma data muito distante da informada, sem devolver erro — é a forma mais perigosa da lista. Informe sempre a hora.
"21/04/2026 12:05:13" (formato brasileiro) Não use. Em filtro é recusada; em gravação o resultado depende da configuração regional do servidor, e o que funciona num ambiente pode falhar em outro.

Fração de segundo em where e having

Campos preenchidos automaticamente pelo servidor guardam também o milissegundo. Para comparar um desses campos por igualdade (=), informe o valor completo, com a fração: "2026-04-21 12:05:13.646". Informando-o sem a fração, a comparação não encontra o registro e a resposta volta sem linhas — e uma alteração ou exclusão nessas condições conclui sem afetar nenhum registro. Em comparações por faixa (>=, <=) a fração não é necessária.

Fuso horário

A API usa sempre o horário do servidor do ERP. Não envie sufixo de fuso horário (Z, -03:00).

Recebeu 400 em um campo de data? Confira nesta ordem: o separador combina com o lugar do valor (T em dataFields, espaço em where, having e params); a hora está presente; não há sufixo de fuso horário. Se um filtro ou parâmetro ainda for recusado, envie-o com um espaço à frente — " 2026-04-21 12:05:13" — que é aceito e produz o mesmo resultado.

GET

A requisição do tipo GET é utilizada para consultas de dados, ela é feita por meio de um Script JSON que é enviado no corpo da requisição BODY e é interpretada pela API.

O Script JSON é composto por um conjunto de parâmetros que são utilizados para a consulta dos dados, abaixo segue a documentação dos parâmetros.

Params Descrição
method Método SQL a executar (GET, POST, PUT, DELETE, PATCH)
objectType Tipo de Objeto a ser consultado
objectName Nome da Tabela, View ou Procedure Result a ser consultada
limit Número de registros que serão retornados na consulta. Sem limit, a resposta traz o resultado inteiro do filtro
offset Número da página, a partir de 1 — não é a quantidade de registros a pular. Com limit 5, offset 1 traz os registros 1 a 5 e offset 2 traz os registros 6 a 10. Use sempre com orderBy. Para ler tabelas grandes, veja Carga Incremental
fields Lista de campos a exibir no SELECT, Os campos podem ser informados um a um ou separados por vírgula
fieldsIgnore Ignora os campos a exibir no SELECT
calculatedFields Campos Calculados a exibir no SELECT
params Usado somente para os objetos [ "FUNCTION", "PROCEDURE RESULT" ]
where Lista de campos e expressões para o WHERE
groupBy Lista de campos para agrupamento da busca. É utilizado uma Lista de Strings.
having Lista de campos e expressões para o HAVING
orderBy Lista de campos para ordenação da busca. É utilizado uma Lista de Strings.

Através do método GET é possível realizar consultas nos seguintes Objetos

ObjectType Descrição
TABLE Tabela do Banco de Dados
VIEW View do Banco de Dados
FUNCTION Função do Banco de Dados com retorno
PROCEDURE RESULT Procedure do Banco de Dados com Retorno SQL

Exemplo:


{
    // *** Método a Ser Executado
    // Nome do método invocado no SQL
    "method": "GET"

    // *** Tipo do Objeto
    // Tipo do Objeto do Select [ TABLE, VIEW, FUNCTION, PROCEDURE RESULT ]
    ,"objectType": "PROCEDURE RESULT"

    // *** Nome do Objeto
    // Nome do Objeto do Select
    ,"objectName": "PRC_RES_CLIFOR1"

    // *** Limit / QUantidade de Registros
    // Quantidade de Registros por resultado
    ,"limit": 5

    // *** Offset / Paginação
    // Número da página, a partir de 1 (não é a quantidade de registros a pular)
    // Ex: Limit: 5 e Offset : 1 apresentaria os registros de 1 a 5
    // Ex: Limit: 5 e Offset : 2 apresentaria os registros de 6 a 10
    ,"offset": 1

    // *** Campos do Select
    ,"fields": [
        "CF_COD",
        "CF_RSOCIAL",
        "CF_CPFCGC",
        "CF_STATUS"
    ]

    // *** Campos a Ignorar
    // Ignora apenas os campos informados e retorna todos os outros
    // Utilizar apenas um dos grupo "fields" ou "fieldsIgnore" nunca os dois juntos
    // Informar os campos de forma individual separados por vírgula
    ,"fieldsIgnore": [ "CF_RSOCIAL" ]

    // *** Campos Calculados
    // Campos com Expressões SQL, campos fabricados com base nos dados da tabela
    // Informar os campos de forma individual separados por vírgula
    ,"calculatedFields" : [
        "1 AS calculatedFields1",
        "2 AS calculatedFields2",
        "3 AS calculatedFields3"
    ]

    // *** Parâmetros
    // Lista de parâmetros e valores a aplicar na procedure antes do WHERE
    ,"params" : [
        // Parâmetros da Função ou da Procedure com Result
        {
            "name" : "pCF_COD",
            "value": "8"
        }
    ]

    // *** where
    // Expressões de filtros aplicadas no WHERE do SQL
    ,"where": [
        // Campos da Tabela
        {
          "type": "Field",
          "name": "CF_STATUS",
          "value": 1
        }

        // Campos calculados
        ,{
          "type": "Field",
          "name": "calculatedFields3",
          "value": 3
        }

        // Expressões SQL
        ,{
          "type": "Expression",
          "value": "CF_COD > 0"
        }
    ]

    // Group By
    // Campos a Agrupar no resultado do SQL
    // Informar os campos de forma individual separados por vírgula
    ,"groupBy" : [
        "CF_COD",
        "CF_RSOCIAL",
        "CF_CPFCGC",
        "CF_STATUS"
    ]

    // *** Having
    // Lista de condições a aplicar depois do SQL pronto
    // Estes filtros são aplicados após os filtros do WHERE onde podemos filtrar um COUNT por exemplo, ou uma condição além do WHERE
    // Informar os campos de forma individual separados por vírgula
    // Aqui podemos utilizar os campos calculados como filtros
    ,"Having" : [
        // Campos da Tabela
        {
          "type": "Field",
          "name": "CF_STATUS",
          "value": 1
        }

        // Campos calculados
        ,{
          "type": "Field",
          "name": "calculatedFields1",
          "value": 1
        }

        // Expressões SQL
        ,{
          "type": "Expression",
          "value": "CF_COD > 0"
        }
    ]

    // *** Order By
    // Campos de ordenação dos resultados
    // Informar os campos de forma individual separados por vírgula com ou sem as clausulas "ASC" e "DESC"
    ,"orderBy": [
        "CF_COD ASC",
        "CF_RSOCIAL DESC"
    ]
}

POST

Params Descrição
method Método SQL a executar (GET, POST, PUT, DELETE, PATCH)
objectType Tipo de Objeto a ser consultado
objectName Nome da Tabela, View ou Procedure Result a ser consultada
dataFields Lista de objetos {name, value[, fieldType]} com os valores a inserir
fieldAI Nome da coluna auto-incremento da tabela (a API deixa o servidor gerar o valor)
fieldsReturn Lista de campos a serem retornados pela API após o INSERT

Através do método POST é possível realizar consultas nos seguintes Objetos

ObjectType Descrição
TABLE Tabela do Banco de Dados

Atenção — erros comuns no POST:

Exemplo:


{
    // method
    // Nome do método invocado no SQL
    "method": "POST"

    // objectType
    // Tipo do Objeto do Select
    ,"objectType": "TABLE"

    // objectName
    // Nome do Objeto do Select
    ,"objectName": "TESTEAPI"

    // Campos para Insert na Tabela
    ,"dataFields": [
        // Campo 1: Codigo
        {
          "name": "CODIGO",
          "value": 1
        }

        // Campo 2: Nome
        ,{
          "name": "NOME",
          "value": "MARIA DA SILVA"
        }
    ]
}

PUT

Params Descrição
method Método SQL a executar (GET, POST, PUT, DELETE, PATCH)
objectType Tipo de Objeto a ser consultado
objectName Nome da Tabela, View ou Procedure Result a ser consultada
dataFields Lista de objetos {name, value[, fieldType]} com os valores a atualizar (não incluir campos de chave primária)
where Filtro do UPDATE. Ao menos um item deve conter "key": true indicando a chave primária

Através do método PUT é possível realizar consultas nos seguintes Objetos

ObjectType Descrição
TABLE Tabela do Banco de Dados

Atenção — erros comuns no PUT:

  1. NÃO utilize o parâmetro fields — ele é exclusivo do método GET. Internamente, a API executa um SELECT de validação antes do UPDATE; ao receber fields no formato de objeto a validação dispara o erro genérico Invalid class typecast. Os valores a atualizar devem ir em dataFields.
  2. O parâmetro where é obrigatório e ao menos um de seus itens deve conter "key": true indicando o(s) campo(s) da chave primária. Sem isso, a API retorna Nao foram informados valores da chave primaria da tabela.
  3. Não inclua campos da chave primária em dataFields — eles devem aparecer apenas no where com "key": true.
  4. Consulte a seção Tipos de Dados e Formatação de Valores para o formato correto de datas, timestamps e números.

Exemplo:


{
    // method
    // Nome do método invocado no SQL
    "method": "PUT"

    // objectType
    // Tipo do Objeto
    ,"objectType": "TABLE"

    // objectName
    // Nome da Tabela
    ,"objectName": "TESTEAPI"

    // Campos para Update da Tabela
    // NÃO informar campos de Chave Primária aqui
    // Formatos: numeric = número ou string com ponto decimal
    // date, timestamp e time = "AAAA-MM-DDTHH:MM:SS" (com "T" em dataFields; a hora é obrigatória)
    ,"dataFields": [
        // String
        {
          "name": "NOME",
          "value": "MARIA DA SILVA"
        }

        // Numeric / Decimal
        ,{
          "name": "VALOR",
          "value": "1234.56"
        }

        // Date (somente data) — informe a meia-noite; o banco descarta a hora
        ,{
          "name": "DATA_VENCIMENTO",
          "value": "2026-04-21T00:00:00"
        }

        // Timestamp (data e hora)
        ,{
          "name": "DATA_EMISSAO",
          "value": "2026-04-21T12:05:13"
        }
    ]

    // Condições para o Update
    // Ao menos um item deve conter "key": true indicando a chave primária
    ,"where": [
        {
          "type": "field",
          "name": "CODIGO",
          "key": true,
          "value": 1
        }
    ]
}

DELETE

Params Descrição
method Método SQL a executar (GET, POST, PUT, DELETE, PATCH)
objectType Tipo de Objeto a ser consultado
objectName Nome da Tabela, View ou Procedure Result a ser consultada
where Filtro do DELETE. Informar obrigatoriamente pelo menos um item com o valor da chave primária

Através do método DELETE é possível realizar consultas nos seguintes Objetos

ObjectType Descrição
TABLE Tabela do Banco de Dados

Atenção:

Exemplo:


{
    // method
    // Nome do método invocado no SQL
    "method": "DELETE"

    // objectType
    // Tipo do Objeto do Select
    ,"objectType": "TABLE"

    // objectName
    // Nome do Objeto do Select
    ,"objectName": "TESTEAPI"

    // Condições para a Exclusão
    ,"where": [
        // Deve-se informar a chave primária da tabela para condição de exclusão
        {
          "type": "field",
          "name": "CODIGO",
          "value": 1
        }
    ]
}

PATCH

Quando usar o PATCH:

Params Descrição
method Método SQL a executar (GET, POST, PUT, DELETE, PATCH)
objectType Tipo de Objeto a ser consultado
objectName Nome da Tabela, View ou Procedure Result a ser consultada
params Lista de parâmetros {name, value} da procedure ou function a invocar

Através do método PATCH é possível realizar consultas nos seguintes Objetos

ObjectType Descrição
FUNCTION Função do Banco de Dados com retorno
PROCEDURE Procedure do Banco de Dados com Retorno SQL

Exemplo:


{
    // method
    // Nome do método invocado no SQL
    "method": "PATCH"

    // objectType
    // Tipo do Objeto do Select
    ,"objectType": "PROCEDURE"

    // objectName
    // Nome do Objeto do Select
    ,"objectName": "PRC_TESTEAPI"

    ,"params" : [
        {
            "name" : "pPARAMETRO",
            "value": "TESTE"
        }
    ]
}

5. SPALLA API TOOLKIT


O que é

O Spalla API Toolkit — o toolkit de API para uso de IA do ERP Spalla — é um conjunto de ferramentas que ensina um agente de inteligência artificial a integrar com esta API. Com ele instalado, o agente deixa de depender de o integrador descrever a API a cada conversa: passa a conhecer o contrato das requisições, os objetos que a sua integração alcança e as regras de cada módulo do ERP.

Funciona com Claude Code, Claude Cowork e OpenAI Codex, e é composto de duas peças independentes entre si — um servidor que expõe a API como ferramentas para o agente, e um conjunto de conhecimento sobre como cada módulo espera ser integrado, que funciona mesmo sem o servidor.

O toolkit conversa apenas com esta API, por HTTP. Ele não abre conexão com a base de dados do ERP, e tudo o que alcança está dentro do escopo que o seu userToken tem liberado — o limite é o mesmo de qualquer integração.

Recursos

RecursoO que faz
Descoberta automática do escopo O toolkit lê o dicionário desta instância e passa a conhecer exatamente os objetos, campos, tipos e verbos que o seu token alcança. Não há catálogo embutido nem lista a manter: o que vale é o que a sua API responde hoje.
Ferramentas tipadas para o agente Consulta, execução de function e de procedure, e gravação, expostas ao agente como operações com parâmetros definidos — em vez de o agente montar JSON solto e errar o formato.
Travas contra acidentes conhecidos Teto de tamanho de resposta, supressão automática de colunas muito longas, limite padrão em consulta sem limite, exigência de chave primária no filtro de alteração e exclusão, pré-visualização com contagem de registros afetados antes de gravar, e nenhuma repetição automática de gravação após falha de rede.
Leitura de volume sem sobrecarga Quando a tarefa é extrair muitos registros, sincronizar outro sistema ou alimentar um painel, o agente propõe a carga incremental por data de atualização em vez da consulta aberta: encontra a coluna de atualização e a chave no dicionário, lê em pacotes e avisa quando uma leitura ampla de tabela pede essa estratégia.
Gravação desligada por padrão Na configuração inicial o toolkit opera somente em leitura, e as operações de gravação nem chegam a ser oferecidas ao agente. Habilitá-las é decisão explícita de quem administra a integração.
Memória entre sessões Aprende as convenções da sua integração — os objetos que ela usa, os filtros que se repetem, o vocabulário da empresa — para que você não precise repetir a mesma instrução em toda conversa. Nunca guarda valor de dado, dado pessoal nem credencial.
Conhecimento por módulo Traz a ordem operacional das chamadas de cada módulo — cadastro de pessoas, cadastro de produto, financeiro, pedido de venda e ordem de compra — nas mesmas versões dos guias publicados na seção 6.
Tratamento de texto formatado Os campos de texto longo do ERP que guardam formatação são convertidos para leitura e regravados no formato correto, sem perder a formatação existente.
Acompanha a evolução da API Quando a sua API ganha ou perde objetos, o toolkit recarrega o dicionário e relata o que mudou, apontando o que ficou obsoleto no que havia aprendido antes.

Vantagens

Como obter

O toolkit é distribuído de forma controlada. Fale com o gestor do ERP Spalla da sua empresa — quem administra o cadastro de API dentro do ERP e define os objetos liberados para cada integração. É com essa pessoa que se obtém o material de instalação, junto com o endereço desta API e o userToken da integração.

6. INSTRUÇÕES COMPLEMENTARES


Além da referência técnica dos métodos apresentada acima, disponibilizamos guias complementares com exemplos de fluxos completos de integração para os principais módulos do ERP Spalla. Consulte os documentos abaixo para roteiros passo a passo, exemplos de requisições encadeadas e boas práticas específicas de cada área.

Fluxo de Contas a Pagar/Receber

Guia completo do fluxo financeiro via API: lançamento, consulta, baixa e gestão de títulos a pagar e a receber, com exemplos de requisições e regras de negócio do módulo financeiro do SPALLA.

Abrir guia →
Cadastro de Pessoas (Clientes e Fornecedores)

Guia completo do cadastro de pessoas via API: criação e manutenção de clientes e fornecedores (CLIFOR), campos obrigatórios, validações e exemplos de requisições para o módulo de cadastros do SPALLA.

Abrir guia →
Cadastro de Produto

Guia completo do cadastro de produtos via API: inclusão em PROD, unidades de equivalência (PRODEQUIV), códigos de barras (PRODBARCOD), preço em tabela de preço (TABPRECO2), campos obrigatórios, herança do NCM, inativação e as travas de produto já movimentado.

Abrir guia →
Pedido de Venda

Guia completo da gravação de pedidos de venda via API: cabeçalho (PED1), itens (PED2), cálculo pela procedure PRC_CALCULAPEDIDO e fechamento do cadeado, com a ordem obrigatória das chamadas e as validações do módulo comercial do SPALLA.

Abrir guia →
Ordem de Compra

Guia completo da gravação de ordens de compra via API: cabeçalho e itens no mesmo par de tabelas do pedido (CF_TIPO = 'F'), cálculo, fechamento e as regras específicas de suprimentos do SPALLA.

Abrir guia →
Módulo COMEX Importação

Página central do módulo de COMEX Importação, com o guia do Orçamento de Importação a partir dela: a montagem do orçamento via API — cabeçalho, itens, adições e despesas —, o cálculo, a alteração e a exclusão, e a geração do Processo de Importação. Cobre a regra de fronteira do módulo, a configuração da instância que muda o comportamento do fluxo e os campos que a tela do ERP preenche e que, pela API, ficam a cargo de quem integra.

Abrir guia →
Análise de Vendas e Faturamento

Guia completo do consumo da análise de vendas via API: as procedures PRC_RES_ANALISEVENDAS2 e PRC_RES_BIANALISEVENDAS como fonte de dados para gráficos e painéis, os 18 tipos de análise, os parâmetros que mudam o total, a leitura correta de custo e margem e o paralelo com a tela Avaliação de Venda Líquida.

Abrir guia →
Módulo de Produção

Página central do módulo de Produção, com cinco guias a partir dela: a Fórmula de Fabricação e o ciclo completo da Ordem de Produção — criação e preparação, apontamento, documentos fiscais e encerramento —, mais a Produção do Dia. Cobre a regra de fronteira do módulo, a configuração da instância que muda o comportamento de cada fluxo, a análise de qualidade por lote e a emissão das notas de insumo e de produto acabado.

Abrir guia →
Controle de Anexos

Guia completo dos anexos via API: o endpoint próprio /root/anexo, em que o verbo HTTP define a operação, a descoberta dos recursos de cada instalação, a montagem do id_registro e as operações de listar, baixar, incluir, substituir e remover arquivos, com as armadilhas que devolvem 200 sem ter funcionado.

Abrir guia →
Carga Incremental por Data de Atualização

Guia de leitura de volume via API: como dividir tabelas muito grandes em pacotes e manter o seu sistema atualizado lendo só o que foi incluído ou alterado, pela data e hora de atualização que o ERP grava em cada registro — com a carga inicial, a sincronização que avança pela marca, a gravação pela chave primária e a reconciliação das exclusões.

Abrir guia →
Segurança da API

Como a API do ERP Spalla protege o acesso aos dados: cada integração usa o seu próprio token e alcança apenas os objetos liberados para ela, com as permissões de acesso do ERP. Explica a diferença entre a documentação pública e a documentação da sua integração, e como consultar o manual detalhado informando o seu userToken.

Abrir guia →

7. OBJETOS DISPONÍVEIS


A API do Spalla expõe quatro tipos de objetos do banco de dados do ERP. Esta seção descreve o que é cada tipo e como ele é utilizado nas requisições.

Como os objetos são liberados: os objetos disponibilizados na API são definidos diretamente no ERP Spalla. Para cada objeto liberado, o manual on-line integrado (acessível com o Token do integrador) detalha a forma de uso — com exemplo de requisição em cURL — e o dicionário de dados completo, apresentando o tipo, o nome e a descrição de cada campo, parâmetro ou retorno.

Como consultar a documentação detalhada da sua integração:

O manual on-line abre a documentação pública completa. A lista detalhada dos objetos liberados para a sua integração — com exemplo de uso e dicionário de dados — é exibida depois que você informa o seu userToken:

  1. Abra o manual on-line no navegador, no endereço da sua API seguido de /root/ajuda.
  2. Na seção Dicionário, informe o seu userToken no campo e confirme.
  3. A página passa a exibir os objetos liberados para a sua integração, com exemplo de requisição em cURL e o dicionário de dados completo de cada campo, parâmetro ou retorno.

Ao confirmar, o userToken é enviado no cabeçalho da requisição e fica guardado apenas na aba do navegador, até ela ser fechada. Um botão encerra o acesso e devolve a página à documentação pública.

Um servidor, vários integradores: o sistema de APIs do Spalla permite que um mesmo servidor e uma mesma rota atendam diferentes integradores, cada um com permissões de acesso e lista de objetos próprias — exatamente como o sistema de permissões de acesso do ERP. Basta variar o Token conforme o usuário específico da API. Dessa forma, a empresa pode manter múltiplos integradores e parceiros com acessos distintos no mesmo servidor de API, cada um com documentação on-line exclusiva.

TABLES — Tabelas

Armazenam os dados persistentes do ERP — cadastros e movimentos. São o único tipo que aceita gravação: além da leitura (GET), permitem inserção (POST), atualização (PUT) e exclusão (DELETE), com suporte a filtros (where), ordenação, paginação e campos calculados. No manual on-line, cada tabela traz o dicionário completo dos campos (nome, tipo, tamanho, se aceita nulo e se é chave primária). Exemplos: CLIFOR (clientes e fornecedores), BANCO (contas bancárias / caixa), CONFIG (parâmetros do sistema), COMPOS (composição de produtos / kits).

objectType: "TABLE"  ·  Operações: GET, POST, PUT, DELETE

VIEWS — Visões

Consultas pré-montadas no banco que combinam e filtram dados de uma ou mais tabelas, entregando um resultado pronto para leitura. São somente leitura, acessadas pelo método GET, com suporte a fields, where, groupBy, having e orderBy. Úteis para relatórios e integrações que precisam de dados já consolidados, sem manipular as tabelas de origem. No manual on-line, cada view lista a estrutura do resultado (campo, tipo, tamanho e descrição).

objectType: "VIEW"  ·  Operações: GET

PROCEDURES — Procedimentos

Rotinas de regra de negócio do ERP. São disparadas pelo método PATCH, recebendo seus parâmetros de entrada no array params. Podem executar ações (lançamentos, rotinas, atualizações) e, quando do tipo PROCEDURE RESULT, retornar um conjunto de dados (status de sucesso/falha, um valor ou uma lista de registros) — neste caso consultadas via GET. No manual on-line, cada procedure documenta os parâmetros de entrada (nome, tipo, obrigatoriedade e default) e a estrutura de retorno.

objectType: "PROCEDURE" / "PROCEDURE RESULT"  ·  Operações: PATCH (execução) · GET (retorno)

FUNCTIONS — Funções

Funções do banco que recebem parâmetros e retornam um valor calculado ou um conjunto de dados. Recomenda-se o método GET (comportamento idêntico a um SELECT sobre a função); o PATCH também é aceito. Indicadas para cálculos e consultas derivadas reutilizáveis pelas integrações. No manual on-line, cada função documenta seus parâmetros e o retorno (nome, tipo, tamanho e descrição).

objectType: "FUNCTION"  ·  Operações: GET (recomendado) · PATCH