LYMOS ERP · API

API do LYMOS ERP

Versão 1 · atualizada em 22 de outubro de 2026

Consulte os dados do seu ERP no seu site, no CRM, em planilhas, no n8n ou no Make: produtos e estoque, clientes, pedidos de venda e de delivery e notas de serviço. A API é só de leitura: não existe rota para criar ou alterar nada, nem aviso automático (webhook) do ERP.

Primeiros passos

  1. No ERP, abra Configurações > Integrações. É preciso a permissão "Gerenciar integrações", que por padrão é só do dono.
  2. Dê um nome ao token, marque o que ele pode ler e escolha a validade. Copie na hora: ele aparece uma vez só.
  3. Use a URL base https://app.lymos.com.br/api/v1/integracao com o cabeçalho Authorization: Bearer SEU_TOKEN e teste:
curl 'https://app.lymos.com.br/api/v1/integracao/perfil' -H 'Authorization: Bearer SEU_TOKEN'

Respostas em JSON. Datas em ISO 8601, valores em reais com ponto decimal, telefones só com dígitos ou com máscara na busca.

Integrar com IA (ChatGPT, Claude, Gemini, Cursor)

A documentação inteira está num arquivo pensado para IA: https://lymos.com.br/api-erp-llms.txt. Cole este pedido na sua IA e troque o trecho entre colchetes:

Quero consultar os dados do meu LYMOS ERP no meu sistema. Leia a documentação completa em https://lymos.com.br/api-erp-llms.txt (é a referência oficial da API de leitura do ERP) e me ajude a: [descreva aqui, ex.: "mostrar o preço e o estoque de um produto quando o cliente perguntar no WhatsApp"]. Use o token pela variável de ambiente LYMOS_ERP_TOKEN e nunca o escreva no código.

Também há o OpenAPI 3.0 para Postman, Insomnia ou gerar cliente.

Autenticação

Toda chamada leva o token no cabeçalho Authorization: Bearer <token>. Cada token é de uma empresa e só enxerga os dados dela. Guarde o token numa variável de ambiente e nunca o coloque em site, aplicativo ou código que roda no navegador. Crie um token por sistema, com validade de 90 dias ou 1 ano: assim você revoga um sem derrubar os outros. A empresa pode ter até 10 tokens ativos, e revogar na tela corta o acesso na hora.

Escopos

EscopoLibera
produtos:lerProdutos e estoque disponível.
clientes:lerClientes.
pedidos:lerPedidos de venda e de delivery. Mostra também o nome do cliente do pedido e, no delivery, o telefone.
nfse:lerNotas de serviço. Mostra também o nome do tomador.

Convenções

TemaComo funciona
Lista{ "data": [...], "meta": { "pagina", "por_pagina", "total", "ultima_pagina" } }
Detalhe{ "data": {...} }
Paginação?pagina=2&por_pagina=50. Padrão 25, máximo 100. Percorra até ultima_pagina.
Sincronização?atualizado_desde= em produtos e clientes devolve só o que mudou.
Datasatualizado_desde aceita AAAA-MM-DD ou ISO 8601. Os demais filtros de data aceitam só AAAA-MM-DD.
Limites120 requisições por minuto por token e 600 por minuto por IP. Excedeu: 429 com Retry-After.
MódulosPedidos de venda dependem do módulo Comércio, delivery do módulo Food e notas de serviço de Comércio, Oficina ou CellTECH. Veja os recursos do seu plano em GET /perfil.

Conexão

GET/perfilTestar a conexão

Escopo: qualquer. Módulo do plano: nenhum.

Mostra a empresa dona do token, os escopos dele e quais recursos o plano do ERP oferece. Funciona com qualquer escopo. Use para conferir o token antes de integrar.

Campos da resposta

CampoTipoDescrição
empresatextoNome da empresa.
tokenobjetonome e expira_em do token.
escoposlistaO que o token pode ler.
recursosobjetoprodutos, clientes, pedidos_venda, pedidos_delivery e notas_servico, cada um true ou false.
curl 'https://app.lymos.com.br/api/v1/integracao/perfil' \
  -H 'Authorization: Bearer SEU_TOKEN'

Resposta

{
  "data": {
    "empresa": "Pizzaria do Zé",
    "token": {
      "nome": "CRM",
      "expira_em": "2027-01-20T00:00:00-03:00"
    },
    "escopos": [
      "produtos:ler",
      "clientes:ler",
      "pedidos:ler"
    ],
    "recursos": {
      "produtos": true,
      "clientes": true,
      "pedidos_venda": false,
      "pedidos_delivery": true,
      "notas_servico": false
    }
  }
}

Produtos

GET/produtosListar produtos

Escopo: produtos:ler. Módulo do plano: nenhum.

Produtos com preço de venda e estoque disponível. Por padrão só vêm os ativos. Custo, margem, fornecedor e dados fiscais não saem.

Parâmetros de consulta

CampoTipoDescrição
buscatextoParte do nome, do SKU ou do código de barras.
ativotexto1 (padrão) só os ativos; 0 só os inativos.
atualizado_desdedataSó o que mudou desde então. AAAA-MM-DD ou ISO 8601, como 2026-10-23T10:00:00-03:00.
paginainteiroPágina, começando em 1.
por_paginainteiroItens por página, de 1 a 100. Padrão 25.

Campos da resposta

CampoTipoDescrição
idinteiroIdentificador do produto.
nometextoNome do produto.
descricaotextoDescrição, quando houver.
skutextoCódigo interno.
codigo_barrastextoCódigo de barras principal.
unidadetextoUnidade de venda, como UN ou KG.
categoriatextoNome da categoria.
preco_vendanúmeroPreço de venda, em reais.
preco_atacadonúmeroPreço de atacado, em reais, quando houver.
ativobooleanoSe o produto está à venda.
controla_estoquebooleanoSe o ERP controla o estoque deste produto.
estoque_disponivelnúmeroQuantidade menos a reservada, nunca negativa. null quando não controla estoque.
atualizado_emdata e horaÚltima alteração, em ISO 8601.
curl 'https://app.lymos.com.br/api/v1/integracao/produtos?busca=calabresa' \
  -H 'Authorization: Bearer SEU_TOKEN'

Resposta

{
  "data": [
    {
      "id": 318,
      "nome": "Pizza grande de calabresa",
      "descricao": null,
      "sku": "PZ-CAL-G",
      "codigo_barras": null,
      "unidade": "UN",
      "categoria": "Pizzas",
      "preco_venda": 54.9,
      "preco_atacado": null,
      "ativo": true,
      "controla_estoque": false,
      "estoque_disponivel": null,
      "atualizado_em": "2026-10-20T15:42:10-03:00"
    }
  ],
  "meta": {
    "pagina": 1,
    "por_pagina": 25,
    "total": 1,
    "ultima_pagina": 1
  }
}

GET/produtos/{id}Ver um produto

Escopo: produtos:ler.

curl 'https://app.lymos.com.br/api/v1/integracao/produtos/318' \
  -H 'Authorization: Bearer SEU_TOKEN'

Resposta

{
  "data": {
    "id": 318,
    "nome": "Pizza grande de calabresa",
    "descricao": null,
    "sku": "PZ-CAL-G",
    "codigo_barras": null,
    "unidade": "UN",
    "categoria": "Pizzas",
    "preco_venda": 54.9,
    "preco_atacado": null,
    "ativo": true,
    "controla_estoque": false,
    "estoque_disponivel": null,
    "atualizado_em": "2026-10-20T15:42:10-03:00"
  }
}

Clientes

GET/clientesListar clientes

Escopo: clientes:ler. Módulo do plano: nenhum.

Nome, contato e cidade. CPF e CNPJ não saem: para ligar um cliente a outro sistema, use o telefone, o e-mail ou o nome.

Parâmetros de consulta

CampoTipoDescrição
buscatextoNome, e-mail ou telefone, com ou sem máscara. Aceita também o formato internacional, como 5575998765432.
ativotexto1 só os ativos; 0 só os inativos. Sem o parâmetro, vêm todos.
atualizado_desdedataSó o que mudou desde então. AAAA-MM-DD ou ISO 8601, como 2026-10-23T10:00:00-03:00.
paginainteiroPágina, começando em 1.
por_paginainteiroItens por página, de 1 a 100. Padrão 25.

Campos da resposta

CampoTipoDescrição
idinteiroIdentificador do cliente.
tipotextoTipo de pessoa.
nometextoNome.
razao_socialtextoRazão social, para empresa.
nome_fantasiatextoNome fantasia, para empresa.
emailtextoE-mail.
telefonetextoTelefone fixo.
celulartextoCelular.
bairrotextoBairro do endereço.
cidadetextoCidade do endereço.
uftextoEstado do endereço.
ativobooleanoSe o cadastro está ativo.
criado_emdata e horaCriação do cadastro.
atualizado_emdata e horaÚltima alteração.
curl 'https://app.lymos.com.br/api/v1/integracao/clientes?busca=5575998765432' \
  -H 'Authorization: Bearer SEU_TOKEN'

Resposta

{
  "data": [
    {
      "id": 27,
      "tipo": "fisica",
      "nome": "Ana Souza",
      "razao_social": null,
      "nome_fantasia": null,
      "email": "ana@exemplo.com.br",
      "telefone": null,
      "celular": "(75) 99876-5432",
      "bairro": "Centro",
      "cidade": "Feira de Santana",
      "uf": "BA",
      "ativo": true,
      "criado_em": "2026-03-02T09:12:00-03:00",
      "atualizado_em": "2026-10-18T14:03:21-03:00"
    }
  ],
  "meta": {
    "pagina": 1,
    "por_pagina": 25,
    "total": 1,
    "ultima_pagina": 1
  }
}

GET/clientes/{id}Ver um cliente

Escopo: clientes:ler.

curl 'https://app.lymos.com.br/api/v1/integracao/clientes/27' \
  -H 'Authorization: Bearer SEU_TOKEN'

Resposta

{
  "data": {
    "id": 27,
    "tipo": "fisica",
    "nome": "Ana Souza",
    "razao_social": null,
    "nome_fantasia": null,
    "email": "ana@exemplo.com.br",
    "telefone": null,
    "celular": "(75) 99876-5432",
    "bairro": "Centro",
    "cidade": "Feira de Santana",
    "uf": "BA",
    "ativo": true,
    "criado_em": "2026-03-02T09:12:00-03:00",
    "atualizado_em": "2026-10-18T14:03:21-03:00"
  }
}

Pedidos de venda

GET/pedidos-vendaListar pedidos de venda

Escopo: pedidos:ler. Módulo do plano: Comércio.

Orçamentos e pedidos do módulo Comércio. Os itens só vêm no detalhe.

Parâmetros de consulta

CampoTipoDescrição
statustextoorcamento, enviado, aprovado, recusado, faturado ou cancelado.
cliente_idinteiroSó os do cliente com este id.
dedataCriados a partir deste dia. AAAA-MM-DD.
atedataCriados até este dia. AAAA-MM-DD.
paginainteiroPágina, começando em 1.
por_paginainteiroItens por página, de 1 a 100. Padrão 25.

Campos da resposta

CampoTipoDescrição
idinteiroIdentificador do pedido.
numerotextoNúmero do pedido.
statustextoorcamento, enviado, aprovado, recusado, faturado ou cancelado.
clienteobjetoid e nome do cliente.
subtotal, desconto, totalnúmeroValores em reais.
condicao_pagamentotextoCondição combinada.
validadedataValidade do orçamento.
data_entregadataEntrega prevista.
venda_idinteiroVenda gerada quando o pedido foi faturado.
criado_emdata e horaCriação do pedido.
itenslistaSó no detalhe: produto_id, descricao, quantidade, preco_unitario, desconto e total.
curl 'https://app.lymos.com.br/api/v1/integracao/pedidos-venda?status=aprovado&cliente_id=27' \
  -H 'Authorization: Bearer SEU_TOKEN'

Resposta

{
  "data": [
    {
      "id": 905,
      "numero": "PV-000905",
      "status": "aprovado",
      "cliente": {
        "id": 27,
        "nome": "Ana Souza"
      },
      "subtotal": 480,
      "desconto": 30,
      "total": 450,
      "condicao_pagamento": "30 dias",
      "validade": "2026-10-30",
      "data_entrega": "2026-11-05",
      "venda_id": null,
      "criado_em": "2026-10-19T11:20:00-03:00"
    }
  ],
  "meta": {
    "pagina": 1,
    "por_pagina": 25,
    "total": 1,
    "ultima_pagina": 1
  }
}

GET/pedidos-venda/{id}Ver um pedido de venda

Escopo: pedidos:ler. Módulo do plano: Comércio.

curl 'https://app.lymos.com.br/api/v1/integracao/pedidos-venda/905' \
  -H 'Authorization: Bearer SEU_TOKEN'

Resposta

{
  "data": {
    "id": 905,
    "numero": "PV-000905",
    "status": "aprovado",
    "cliente": {
      "id": 27,
      "nome": "Ana Souza"
    },
    "subtotal": 480,
    "desconto": 30,
    "total": 450,
    "condicao_pagamento": "30 dias",
    "validade": "2026-10-30",
    "data_entrega": "2026-11-05",
    "venda_id": null,
    "criado_em": "2026-10-19T11:20:00-03:00",
    "itens": [
      {
        "produto_id": 318,
        "descricao": "Pizza grande de calabresa",
        "quantidade": 10,
        "preco_unitario": 48,
        "desconto": 0,
        "total": 480
      }
    ]
  }
}

Pedidos de delivery

GET/pedidos-deliveryListar pedidos de delivery

Escopo: pedidos:ler. Módulo do plano: Food.

Pedidos do cardápio digital do módulo Food, com o endereço de entrega completo, sem as coordenadas do mapa e sem dados de pagamento. Pedidos do iFood não entram.

Parâmetros de consulta

CampoTipoDescrição
telefonetextoTelefone do cliente, com ou sem máscara. No mínimo 4 dígitos; menos que isso responde 422.
statustextoSituação do pedido, como aceito, em_preparo, saiu_para_entrega, entregue ou cancelado.
cliente_idinteiroSó os do cliente com este id.
dedataCriados a partir deste dia. AAAA-MM-DD.
atedataCriados até este dia. AAAA-MM-DD.
paginainteiroPágina, começando em 1.
por_paginainteiroItens por página, de 1 a 100. Padrão 25.

Campos da resposta

CampoTipoDescrição
idinteiroIdentificador do pedido.
statustextoSituação do pedido, como aceito, em_preparo, saiu_para_entrega, entregue ou cancelado.
cliente_id, cliente_nome, cliente_telefoneinteiro e textoQuem pediu.
endereco_entregaobjetologradouro, numero, complemento, bairro, cidade, uf, cep, referencia e descricao. Sem as coordenadas do mapa.
subtotal, desconto, taxa_entrega, totalnúmeroValores em reais.
forma_pagamentotextoComo o cliente paga.
pix_confirmadobooleanoSó para Pix: se o pagamento foi confirmado. null quando não se aplica (dinheiro e cartão na entrega).
tempo_estimado_mininteiroTempo estimado, em minutos.
criado_em, aceito_em, saiu_para_entrega_em, entregue_em, cancelado_emdata e horaMarcos do pedido. null quando ainda não aconteceu.
observacoes, motivo_cancelamento, itenstexto e listaSó no detalhe. Cada item traz nome, quantidade, preco_unitario, total e observacao.
curl 'https://app.lymos.com.br/api/v1/integracao/pedidos-delivery?telefone=75998765432' \
  -H 'Authorization: Bearer SEU_TOKEN'

Resposta

{
  "data": [
    {
      "id": 1042,
      "status": "entregue",
      "cliente_id": 27,
      "cliente_nome": "Ana Souza",
      "cliente_telefone": "75998765432",
      "endereco_entrega": {
        "logradouro": "Rua das Flores",
        "numero": "120",
        "complemento": null,
        "bairro": "Centro",
        "cidade": "Feira de Santana",
        "uf": "BA",
        "cep": "44001000",
        "referencia": "Perto da praça",
        "descricao": null
      },
      "subtotal": 54.9,
      "desconto": 0,
      "taxa_entrega": 6,
      "total": 60.9,
      "forma_pagamento": "pix",
      "pix_confirmado": true,
      "tempo_estimado_min": 40,
      "criado_em": "2026-10-21T18:02:11-03:00",
      "aceito_em": "2026-10-21T18:03:40-03:00",
      "saiu_para_entrega_em": "2026-10-21T18:40:05-03:00",
      "entregue_em": "2026-10-21T19:05:12-03:00",
      "cancelado_em": null
    }
  ],
  "meta": {
    "pagina": 1,
    "por_pagina": 25,
    "total": 1,
    "ultima_pagina": 1
  }
}

GET/pedidos-delivery/{id}Ver um pedido de delivery

Escopo: pedidos:ler. Módulo do plano: Food.

curl 'https://app.lymos.com.br/api/v1/integracao/pedidos-delivery/1042' \
  -H 'Authorization: Bearer SEU_TOKEN'

Resposta

{
  "data": {
    "id": 1042,
    "status": "entregue",
    "cliente_id": 27,
    "cliente_nome": "Ana Souza",
    "cliente_telefone": "75998765432",
    "endereco_entrega": {
      "logradouro": "Rua das Flores",
      "numero": "120",
      "complemento": null,
      "bairro": "Centro",
      "cidade": "Feira de Santana",
      "uf": "BA",
      "cep": "44001000",
      "referencia": "Perto da praça",
      "descricao": null
    },
    "subtotal": 54.9,
    "desconto": 0,
    "taxa_entrega": 6,
    "total": 60.9,
    "forma_pagamento": "pix",
    "pix_confirmado": true,
    "tempo_estimado_min": 40,
    "criado_em": "2026-10-21T18:02:11-03:00",
    "aceito_em": "2026-10-21T18:03:40-03:00",
    "saiu_para_entrega_em": "2026-10-21T18:40:05-03:00",
    "entregue_em": "2026-10-21T19:05:12-03:00",
    "cancelado_em": null,
    "observacoes": null,
    "motivo_cancelamento": null,
    "itens": [
      {
        "nome": "Pizza grande de calabresa",
        "quantidade": 1,
        "preco_unitario": 54.9,
        "total": 54.9,
        "observacao": "Sem cebola"
      }
    ]
  }
}

Notas de serviço

GET/notas-servicoListar notas de serviço

Escopo: nfse:ler. Módulo do plano: Comércio, Oficina ou CellTECH.

NFS-e do ERP. Leia o campo ambiente: enquanto a empresa emite na produção restrita do governo, ele vem "teste" e a nota não vale como documento fiscal. Documento do tomador, XML e erros do governo não saem.

Parâmetros de consulta

CampoTipoDescrição
statustextorascunho, transmitindo, autorizada, rejeitada, cancelada ou pendente_acao.
cliente_idinteiroSó os do cliente com este id.
competencia_dedataCompetência a partir deste dia. AAAA-MM-DD.
competencia_atedataCompetência até este dia. AAAA-MM-DD.
paginainteiroPágina, começando em 1.
por_paginainteiroItens por página, de 1 a 100. Padrão 25.

Campos da resposta

CampoTipoDescrição
idinteiroIdentificador da nota.
statustextorascunho, transmitindo, autorizada, rejeitada, cancelada ou pendente_acao.
ambientetextoproducao ou teste. Nota de teste não vale como documento fiscal.
numero_nfse, chave_acessotextoIdentificação da nota.
cliente_id, tomador_nomeinteiro e textoQuem contratou o serviço. Sem o documento do tomador.
descricao_servicotextoDescrição do serviço.
valor_servico, aliquota_iss, valor_issnúmeroValores em reais e alíquota em %.
iss_retidobooleanoSe o ISS foi retido.
data_competenciadataCompetência da nota.
emitida_em, autorizada_em, cancelada_emdata e horaMarcos da nota.
motivo_cancelamento, rejeitadatexto e booleanoCancelamento e se o governo recusou a nota.
curl 'https://app.lymos.com.br/api/v1/integracao/notas-servico?status=autorizada' \
  -H 'Authorization: Bearer SEU_TOKEN'

Resposta

{
  "data": [
    {
      "id": 318,
      "status": "autorizada",
      "ambiente": "producao",
      "numero_nfse": "2026000318",
      "chave_acesso": null,
      "cliente_id": 27,
      "tomador_nome": "Ana Souza",
      "descricao_servico": "Manutenção preventiva de equipamento",
      "valor_servico": 350,
      "aliquota_iss": 2.5,
      "valor_iss": 8.75,
      "iss_retido": false,
      "data_competencia": "2026-10-01",
      "emitida_em": "2026-10-05T10:11:00-03:00",
      "autorizada_em": "2026-10-05T10:11:42-03:00",
      "cancelada_em": null,
      "motivo_cancelamento": null,
      "rejeitada": false
    }
  ],
  "meta": {
    "pagina": 1,
    "por_pagina": 25,
    "total": 1,
    "ultima_pagina": 1
  }
}

GET/notas-servico/{id}Ver uma nota de serviço

Escopo: nfse:ler. Módulo do plano: Comércio, Oficina ou CellTECH.

curl 'https://app.lymos.com.br/api/v1/integracao/notas-servico/318' \
  -H 'Authorization: Bearer SEU_TOKEN'

Resposta

{
  "data": {
    "id": 318,
    "status": "autorizada",
    "ambiente": "producao",
    "numero_nfse": "2026000318",
    "chave_acesso": null,
    "cliente_id": 27,
    "tomador_nome": "Ana Souza",
    "descricao_servico": "Manutenção preventiva de equipamento",
    "valor_servico": 350,
    "aliquota_iss": 2.5,
    "valor_iss": 8.75,
    "iss_retido": false,
    "data_competencia": "2026-10-01",
    "emitida_em": "2026-10-05T10:11:00-03:00",
    "autorizada_em": "2026-10-05T10:11:42-03:00",
    "cancelada_em": null,
    "motivo_cancelamento": null,
    "rejeitada": false
  }
}

Erros

Status HTTP mais uma mensagem em JSON.

StatusSignificado
401Token inválido, expirado ou revogado.
403O token não tem o escopo, o plano do ERP não tem o módulo ou a assinatura está inativa.
404Registro não encontrado. Vale também para o registro de outra empresa.
422Parâmetro inválido: data fora do formato (inclusive 31/02), palavra como "ontem" ou telefone com menos de 4 dígitos.
429Limite de requisições excedido. O cabeçalho Retry-After diz quantos segundos esperar.

Boas práticas