Integre seu ERP ao SWMS: cadastre e atualize Produtos, Clientes e Fornecedores por chamadas REST, com as mesmas regras de validação do sistema — incluindo a criação automática de Categorias, Marcas e Fabricantes.
Baixar coleção PostmanA SWMS API é uma API REST que troca mensagens em JSON (UTF-8). Todos os endpoints ficam sob o prefixo versionado /v1/ e exigem autenticação por token.
A URL base depende da instalação do SWMS no seu ambiente. Exemplo:
http://SEU_SERVIDOR/api
Todas as rotas desta documentação são relativas à URL base — por exemplo, POST {URL base}/v1/produtos/importar.
Toda requisição deve enviar o token de acesso no cabeçalho HTTP Authorization, no esquema Bearer:
Authorization: Bearer SEU_TOKEN_AQUI Content-Type: application/json
O token é gerado dentro do SWMS, em Administração → Api Tokens, pelo administrador da empresa. Cada token identifica a empresa: todos os dados gravados pela API pertencem à empresa dona do token.
Requisições sem token, com token inválido ou revogado recebem 401 Unauthorized.
Os endpoints de importação funcionam por upsert: se o registro não existe, é criado; se existe, é atualizado. A chave de casamento de cada cadastro é:
codigo;codigoProduto + unidade;cnpj ou cpf (comparados só pelos dígitos). Um dos dois é obrigatório e o dígito verificador é validado.Reenviar a mesma carga é seguro: o que já foi gravado vira atualização. Isso torna a integração tolerante a reprocessamentos.
Nos produtos, os campos categoria, marca e fabricante são resolvidos pelo título: títulos que não existem no cadastro são criados automaticamente na importação. Atenção: campo vazio ou ausente limpa a associação do produto ("a carga manda").
POST /v1/produtos/importar
Cria e/ou atualiza produtos e suas unidades (embalagens). As duas listas podem ser enviadas juntas ou separadamente; as unidades podem referenciar produtos da própria carga ou já cadastrados.
{
"produtos": [
{
"codigo": "ERP-00001",
"titulo": "Arroz Branco Tipo 1 5kg",
"descricao": "Fardo com 6 pacotes de 5kg",
"categoria": "Alimentos",
"marca": "Boa Safra",
"fabricante": "Boa Safra Alimentos SA",
"codigoBarras": "7891234567895",
"ncm": "10063021",
"pesoLiquido": 5.0,
"pesoBruto": 5.1,
"altura": 12,
"largura": 25,
"comprimento": 35,
"controleLote": true,
"controleValidade": true,
"diasMinimosValidade": 90,
"rotacao": "FEFO",
"permiteFracionamento": true,
"ativo": true
}
],
"unidades": [
{
"codigoProduto": "ERP-00001",
"unidade": "UN",
"unidadeBase": true,
"fator": 1,
"codigoBarras": "7891234567895",
"picking": true,
"recebimento": true,
"expedicao": true,
"ativo": true
},
{
"codigoProduto": "ERP-00001",
"unidade": "CX",
"fator": 6,
"codigoBarras": "17891234567892",
"recebimento": true,
"expedicao": true,
"ativo": true
}
]
}
produtos[]| Campo | Tipo | Descrição |
|---|---|---|
codigo | texto | obrigatório · chave do upsert — código do produto no seu sistema |
titulo | texto | obrigatório — nome do produto (único por empresa) |
descricao | texto | descrição livre |
categoria | texto | título da categoria — inexistente é criada; vazio limpa a associação |
marca | texto | título da marca — mesma regra da categoria |
fabricante | texto | título do fabricante — mesma regra da categoria |
codigoBarras | texto | GTIN/EAN do produto (único na carga) |
ncm / cest | texto | classificações fiscais |
pesoLiquido / pesoBruto | decimal | pesos em kg |
altura / largura / comprimento | inteiro | dimensões em cm (o volume é calculado automaticamente) |
controleLote / controleValidade | booleano | controla lote / validade (padrão false) |
diasMinimosValidade | inteiro | validade mínima aceita no recebimento, em dias |
pesoVariavel | booleano | produto vendido por peso |
rotacao | texto | estratégia de rotação: FIFO, FEFO ou LIFO |
permiteFracionamento | booleano | permite separação fracionada do palete |
ativo | booleano | padrão true |
linha | inteiro | opcional — identificador do item nas mensagens de erro (padrão: posição na lista) |
unidades[]| Campo | Tipo | Descrição |
|---|---|---|
codigoProduto | texto | obrigatório · chave do upsert — código do produto (da carga ou já cadastrado) |
unidade | texto | obrigatório · chave do upsert — UN, CX, FD ou PAL |
unidadeBase | booleano | marca a unidade-base do produto (apenas uma por produto) |
fator | inteiro | obrigatório — quantas unidades-base a embalagem contém (> 0) |
descricao | texto | descrição da embalagem |
codigoBarras | texto | GTIN/EAN da embalagem |
vendidoPorPeso | booleano | embalagem de peso variável |
pesoNominal / toleranciaPeso | decimal | peso nominal (kg) e tolerância percentual do peso variável |
picking / recebimento / expedicao | booleano | operações permitidas com a embalagem |
ativo | booleano | padrão true |
linha | inteiro | opcional — identificador nas mensagens de erro |
{
"produtosNovos": 1,
"produtosAtualizados": 0,
"unidadesNovas": 2,
"unidadesAtualizadas": 0,
"categoriasCriadas": ["Alimentos"],
"marcasCriadas": ["Boa Safra"],
"fabricantesCriados": ["Boa Safra Alimentos SA"]
}
POST /v1/clientes/importar
Cria e/ou atualiza clientes. O corpo é um array de clientes. O casamento é feito pelo CNPJ/CPF (só os dígitos importam — pode enviar com ou sem máscara). Um dos dois é obrigatório em cada registro e o dígito verificador é validado — registro sem documento ou com documento inválido é recusado (resposta 400 com o erro da linha).
[
{
"titulo": "Supermercado Central Ltda",
"tipo": "PJ",
"cnpj": "12345678000195",
"razaoSocial": "Supermercado Central Ltda",
"nomeFantasia": "Central Supermercados",
"telefoneComercial": "4133334444",
"email": "compras@central.com.br",
"cep": "80010000",
"endereco": "Rua das Flores",
"numero": "1500",
"bairro": "Centro",
"cidade": "Curitiba",
"estado": "PR",
"ativo": true
}
]
| Campo | Tipo | Descrição |
|---|---|---|
titulo | texto | obrigatório — nome de exibição (único por empresa; fallback do upsert) |
tipo | texto | PF ou PJ — se omitido, é deduzido do documento informado |
cnpj | texto | chave do upsert — 14 dígitos (com ou sem máscara), dígito verificador validado; obrigatório informar cnpj ou cpf |
cpf | texto | chave do upsert — 11 dígitos (com ou sem máscara), dígito verificador validado; obrigatório informar cnpj ou cpf |
razaoSocial / nomeFantasia | texto | dados de pessoa jurídica |
inscricaoEstadual / inscricaoMunicipal | texto | inscrições fiscais |
nomeCompleto | texto | dados de pessoa física |
dataNascimento | data | formato AAAA-MM-DD |
sexo | texto | Masculino / Feminino (ou M / F) |
telefoneResidencial / telefoneComercial / celular | texto | telefones |
email | texto | e-mail de contato |
cep / endereco / numero / complemento / bairro / cidade | texto | endereço |
estado | texto | UF com 2 letras (ex.: PR) |
ativo | booleano | padrão true |
linha | inteiro | opcional — identificador nas mensagens de erro |
{ "novos": 1, "atualizados": 0 }
POST /v1/fornecedores/importar
Cria e/ou atualiza fornecedores. O corpo, os campos e as respostas são idênticos aos de Clientes (veja a tabela acima): array de registros, casamento por CNPJ/CPF (obrigatório e validado), e resposta 200 com novos / atualizados.
| Código | Significado | Corpo |
|---|---|---|
| 200 OK | Carga validada e aplicada | resumo (novos / atualizados / apoios criados) |
| 400 Bad Request | Erros de validação | { "erros": ["Produtos linha 1: ...", ...] } |
| 401 Unauthorized | Token ausente, inválido ou revogado | { "erro": "Não autorizado..." } |
| 422 Unprocessable Entity | Falha ao aplicar a carga (a mensagem indica o item) | { "erro": "..." } |
{
"erros": [
"Clientes linha 1: CNPJ deve ter 14 dígitos",
"Clientes linha 3: Título repetido na planilha"
]
}