Empresarial Empresarial Entrar
Empresarial

Biblioteca de integracao

API de integração: clientes, vendas e NF-e

Esta página documenta a API deste tenant em ioftalmo.empresarial.inf.br. A URL base é https://ioftalmo.empresarial.inf.br/api; os códigos dos exemplos são identificadores internos deste tenant.

Base URL

https://ioftalmo.empresarial.inf.br/api

Use esta base em todas as chamadas.

Autenticação

Bearer token

Envie o token de API do usuário autorizado.

Limites de consulta e uso responsável

A API aceita no máximo 240 requisições por minuto. O limite é compartilhado entre todas as rotas desta API; portanto, listagens, consultas de itens, criação e acompanhamento de movimentos consomem a mesma capacidade.

Recomendação de integração

Trabalhe até 200 requisições por minuto, em fila, para manter margem para novas tentativas e outros processos. Pagine resultados com per_page; não faça uma consulta por item quando puder consultar uma página.

Quando atingir o limite

A resposta será 429 Too Many Requests. Pause pelo tempo indicado em Retry-After, aplique espera progressiva e tente novamente. Não repita a chamada em loop: insistência pode bloquear temporariamente o consumo da integração.

Para acompanhar NF-e/NFS-e, faça polling moderado — por exemplo, a cada 10 segundos por movimento pendente — e pare assim que houver autorização, rejeição ou retorno para correção.

Fluxo de integração

  1. 1. Gere um token de API para o usuário autorizado.
  2. 2. Consulte empresa, estabelecimento e itens que serão usados na venda.
  3. 3. Consulte ou cadastre o cliente/fornecedor e guarde o codigo.
  4. 4. Crie o movimento com seus produtos ou serviços.
  5. 5. Envie situacao: 2 para concluir a venda e enfileirar a NF-e, quando aplicável.
  6. 6. Consulte o movimento para acompanhar os campos de retorno fiscal.

Headers obrigatórios

Authorization: Bearer SEU_TOKEN_DE_API
Accept: application/json
Content-Type: application/json

Envie JSON em POST, PUT e PATCH.

Dados de referência: empresa, estabelecimento e itens

Estas rotas são somente leitura. Consulte-as antes de criar o movimento para usar os códigos já cadastrados no ERP. Elas não expõem dados fiscais calculados nem permitem alterar os cadastros.

Empresa e estabelecimento

GET https://ioftalmo.empresarial.inf.br/api/V1/tenant/empresa?search=matriz

GET https://ioftalmo.empresarial.inf.br/api/V1/tenant/estab?empresa=20&per_page=50

Empresa retorna codigo, nome e cnpj. Estabelecimento retorna codigo, empresa, nome, cnpj, inscricao_estadual e inscricao_municipal.

Itens: produtos e serviços

GET https://ioftalmo.empresarial.inf.br/api/V1/tenant/item?tipo=produto&search=ABC-001

GET https://ioftalmo.empresarial.inf.br/api/V1/tenant/item?tipo=servico&search=instalacao

Use tipo=produto ou tipo=servico e search por código, nome, referência ou código de barras. A busca de produto inclui itens de uso misto. O retorno contém apenas codigo, nome, referencia, codigo_barras e tipo (produto, servico ou ambos). Envie esse codigo como item no movimento.

Endpoints publicados

Referências do ERP

Consultas somente leitura para identificar a empresa, o estabelecimento e os itens que podem ser usados no movimento.

  • GET /V1/tenant/empresa: Listar empresas: código, nome e CNPJ.
  • GET /V1/tenant/estab: Listar estabelecimentos: código, empresa, nome, CNPJ, IE e IM.
  • GET /V1/tenant/item: Pesquisar produtos e serviços disponíveis para o movimento.

Pessoas

Cadastre e mantenha clientes ou fornecedores no ERP. A pessoa pode ser física (PF) ou jurídica (PJ), conforme os dados enviados pelo sistema remoto.

  • GET /V1/tenant/pessoa: Listar pessoas com paginacao e filtros opcionais.
  • POST /V1/tenant/pessoa: Cadastrar cliente, fornecedor ou ambos; cidade_ibge é convertido internamente.
  • GET /V1/tenant/pessoa/{codigo}: Consultar uma pessoa pelo codigo.
  • PUT/PATCH /V1/tenant/pessoa/{codigo}: Atualizar uma pessoa pelo codigo.
  • DELETE /V1/tenant/pessoa/{codigo}: Excluir uma pessoa pelo codigo.

Movimento

Registre a operação comercial no ERP: cliente/fornecedor, produtos ou serviços, valores, condição de venda e situação. O movimento é a base para estoque, financeiro e emissão fiscal.

  • GET /V1/tenant/docmov: Listar movimentos com paginacao e filtros opcionais.
  • POST /V1/tenant/docmov: Registrar uma venda, compra ou prestação de serviço.
  • GET /V1/tenant/docmov/{codigo}: Consultar um movimento pelo codigo.
  • PUT/PATCH /V1/tenant/docmov/{codigo}: Atualizar um movimento pelo codigo.
  • DELETE /V1/tenant/docmov/{codigo}: Excluir um movimento pelo codigo.
  • GET /V1/tenant/docmov/{codigo}/xml: Baixar o XML fiscal autorizado do movimento.
  • POST /V1/tenant/docmov/{codigo}/concluir: Alternativa para concluir o movimento; prefira PATCH com situacao=2.
  • POST /V1/tenant/docmov/{codigo}/cancelar: Cancelar um movimento.

1. Cadastro de pessoa: clientes e fornecedores

Nesta etapa, o sistema remoto cria ou atualiza o cadastro que será usado como cliente ou fornecedor. A pessoa pode ser física ou jurídica, conforme os dados enviados. Informe cidade_ibge; a API localiza internamente o código de cidade do ERP. Para NF-e, mantenha endereço, CEP e número completos.

POST https://ioftalmo.empresarial.inf.br/api/V1/tenant/pessoa
Authorization: Bearer SEU_TOKEN_DE_API
Content-Type: application/json

{
  "nomefantasia": "MERCADO EXEMPLO LTDA",
  "razaosocial": "MERCADO EXEMPLO LTDA",
  "tipopessoa": 1,
  "inscrfederal": "12345678000195",
  "cidade_ibge": "3550308",
  "cliente": 1,
  "email": "financeiro@exemplo.com",
  "logradouro": "RUA",
  "endereco": "DAS FLORES",
  "numero": "100",
  "bairro": "CENTRO",
  "cep": "01001000"
}
GET https://ioftalmo.empresarial.inf.br/api/V1/tenant/pessoa?search=12345678000195&cliente=1&per_page=50

PATCH https://ioftalmo.empresarial.inf.br/api/V1/tenant/pessoa/456
Content-Type: application/json

{ "fone1": "11999999999", "email": "novo-contato@exemplo.com", "cliente": 1 }

DELETE https://ioftalmo.empresarial.inf.br/api/V1/tenant/pessoa/456

A exclusão só é realizada quando não houver vínculos com outros registros. Caso a pessoa já tenha sido usada, a API responde 422; mantenha o cadastro e, se necessário, marque-o como inativo. O campo cidade interno não é aceito pela integração: envie sempre o código IBGE em cidade_ibge. Para emitir NF-e, complete antes o endereço fiscal do destinatário, incluindo CEP válido e número.

2. Cadastro de movimento de venda

Nesta etapa, o sistema remoto registra a venda, compra ou serviço, vinculando a pessoa cadastrada e os itens comercializados. O ERP aplica automaticamente as configurações padrão do estabelecimento — tipo de movimento, série, carteira, condição de pagamento e demais regras.

A integração não precisa administrar tipo, carteira, condição de pagamento, operação de movimento ou série. Em cada criação, a API ignora qualquer tipomov recebido e usa o tipo padrão do estabelecimento, exatamente como a inclusão pelo Docmov interno. Os itens usam a operação vinculada a esse tipo, salvo opmov explicitamente informado no item.

POST https://ioftalmo.empresarial.inf.br/api/V1/tenant/docmov
Authorization: Bearer SEU_TOKEN_DE_API
Content-Type: application/json

{
  "empresa": 1,
  "estab": 1,
  "pessoa": 456,
  "dataemissao": "2026-07-16",
  "obs": "PEDIDO ORIGEM LOJA VIRTUAL #10001",
  "produtos": [
    { "item": 789, "qtid": 2, "valor": 49.90, "desconto": 0 }
  ]
}

O exemplo omite docserie, carteira e condicao_pagamento para usar os padrões. Se o tipo padrão ou algum de seus vínculos não estiver configurado, a criação retorna 422; ajuste a configuração do estabelecimento/tipo de movimento no ERP antes de reenviar.

Dados adicionais: frete e indicador de presença

São opcionais; quando omitidos, usam o padrão do tipo de movimento.

frete — modalidade

  • 0: remetente (CIF).
  • 1: destinatário (FOB).
  • 2: terceiros.
  • 3: transporte próprio do remetente.
  • 4: transporte próprio do destinatário.
  • 9: sem transporte.

indpres — presença

  • 0: não se aplica.
  • 1: presencial.
  • 2: internet.
  • 3: teleatendimento.
  • 4: entrega a domicílio.
  • 5: presencial fora do estabelecimento.
  • 9: não presencial — outros.
{ "frete": 1, "indpres": 2 }

Consultar, editar ou excluir movimento

GET https://ioftalmo.empresarial.inf.br/api/V1/tenant/docmov/9001

PATCH https://ioftalmo.empresarial.inf.br/api/V1/tenant/docmov/9001
Content-Type: application/json

{
  "obs": "PEDIDO LOJA VIRTUAL #10001 - ALTERADO",
  "produtos": [
    { "seq": 1, "item": 789, "qtid": 3, "valor": 49.90 }
  ]
}

DELETE https://ioftalmo.empresarial.inf.br/api/V1/tenant/docmov/9001

Ao enviar produtos, servicos, parcelas ou doc_refs, a lista recebida passa a ser a composição daquela seção; envie lista vazia para removê-la. A exclusão é permitida somente para movimento não bloqueado.

Parcelas e serviços

{
  "parcelas": [
    { "parcela": 1, "vencimento": "2026-08-16", "valor": 49.90 }
  ],
  "servicos": [
    { "item": 321, "qtid": 1, "valor": 150.00, "ISS_aliq": 5 }
  ]
}

A parcela sem carteira usa a carteira resolvida no cabeçalho. Use seq para manter uma linha específica nas atualizações.

3. Situação do movimento e transmissão de NF-e

Não há uma chamada fiscal separada. Envie situacao: 1 para salvar o movimento pendente (é o padrão), ou situacao: 2 para salvá-lo já concluído. A transição para 2 efetiva o movimento e, quando a série resolvida for uma série de NF-e e a configuração fiscal estiver ativa, valida e agenda a transmissão automaticamente.

POST https://ioftalmo.empresarial.inf.br/api/V1/tenant/docmov
Authorization: Bearer SEU_TOKEN_DE_API
Content-Type: application/json

{
  "empresa": 1,
  "estab": 1,
  "pessoa": 456,
  "situacao": 2,
  "produtos": [{ "item": 789, "qtid": 1, "valor": 49.90 }]
}

PATCH https://ioftalmo.empresarial.inf.br/api/V1/tenant/docmov/9001
Content-Type: application/json

{ "situacao": 2, "atualizar_data_emissao": false }

GET https://ioftalmo.empresarial.inf.br/api/V1/tenant/docmov/9001
  • 1 — Pendente: permite completar ou alterar o movimento depois.
  • 2 — Concluído: efetiva o movimento e inicia o fluxo fiscal quando aplicável.
  • atualizar_data_emissao: true substitui data e hora de emissão pelo momento da conclusão.
  • Uma falha de validação fiscal impede a transição para 2 e retorna 422 com erros.
  • Uma resposta 200 confirma a conclusão e o agendamento; a autorização fiscal é assíncrona.
  • Não considere a NF-e autorizada apenas por situacao: 2. Consulte nfe_status, nfe_situacao e nfe_autorizada; quando autorizada, a resposta também terá nfe_chave e nfe_protocolo.
  • Em caso de rejeição ou falha no processamento assíncrono, o sistema pode reabrir o movimento para situacao: 1. Corrija os dados, consulte nfe_status e nfe_status_retorno, e envie novamente situacao: 2.
  • Uma NF-e já emitida ou em processamento não é reenviada automaticamente.

Para NFS-e, acompanhe também os campos específicos devolvidos pelo movimento, como nfse_enviado e nfse_rps. A integração deve guardar o código do movimento e realizar polling por GET /docmov/{codigo} até haver autorização, rejeição ou necessidade de correção.

Status fiscal retornado no movimento

Toda consulta de Movimento retorna nfe_status (código), nfe_status_descricao, nfe_situacao, nfe_autorizada, nfe_cancelada e nfe_emitida. Use os campos booleanos para a decisão da integração e conserve o código para auditoria.

{
  "situacao": 2,
  "nfe_status": 100,
  "nfe_status_descricao": "NF-e autorizada pela SEFAZ",
  "nfe_situacao": "autorizada",
  "nfe_autorizada": true,
  "nfe_cancelada": false,
  "nfe_emitida": true,
  "nfe_chave": "...",
  "nfe_protocolo": "..."
}

NF-e de produto — SEFAZ

  • 0: não enviada; 1: pendente; 2: processando; 3: rejeitada/erro.
  • 100 ou 150: autorizada — emissão confirmada.
  • 101, 135, 151 ou 155: cancelada — foi emitida, mas não está mais válida.
  • 102: numeração inutilizada; 103: lote recebido; 104: lote processado; 105: lote em processamento.
  • 110, 301 ou 302: denegada; 128: evento fiscal processado.
  • Outros códigos SEFAZ a partir de 200 (por exemplo, 805) são retornados como rejeitada, com o código preservado para consulta da regra fiscal.

NFS-e de serviço

  • 0: não enviada; 1: pendente; 2: processando; 3: rejeitada/erro.
  • 4: autorizada — emissão confirmada.
  • 5: cancelada — foi emitida, mas não está mais válida.

nfe_emitida é verdadeiro para documento autorizado ou posteriormente cancelado. Para saber se ainda é fiscalmente válido, use nfe_autorizada=true e nfe_cancelada=false.

Filtros, paginação e respostas

Pessoas

search, cliente, fornecedor, per_page e page. Em criação/edição, use cidade_ibge, nunca o código interno de cidade.

Movimentos

empresa, estab, situacao, pessoa, tipomov, docserie, search, dataemissao_ini, dataemissao_fim, per_page e page.

Referências

empresa e estab aceitam search; estabelecimentos também aceitam empresa. Itens aceitam tipo (produto ou servico) e search. Todas aceitam per_page e page.

GET https://ioftalmo.empresarial.inf.br/api/V1/tenant/docmov?empresa=1&estab=1&dataemissao_ini=2026-07-01&dataemissao_fim=2026-07-31&per_page=50

{
  "sucesso": true,
  "mensagem": "obtidos com sucesso",
  "data": [],
  "meta": { "pagina_atual": 1, "ultima_pagina": 1, "por_pagina": 50, "total": 0 }
}
  • 200: consulta, alteração, conclusão ou cancelamento executado.
  • 201: registro criado; use o campo codigo retornado nas próximas chamadas.
  • 401: token ausente, inválido ou sem acesso ao tenant.
  • 404: recurso não encontrado.
  • 422: payload inválido, vínculo inexistente, bloqueio ou regra fiscal não atendida.

Dados retornados e XML fiscal

As respostas de Movimento expõem somente dados operacionais: identificadores, datas, situação, totais comerciais, itens, parcelas e retorno fiscal. Bases, alíquotas, valores calculados de impostos, regras internas e XML não são incluídos no JSON do movimento.

GET https://ioftalmo.empresarial.inf.br/api/V1/tenant/docmov/9001/xml
Authorization: Bearer SEU_TOKEN_DE_API
Accept: application/xml
  • O detalhe do movimento informa xml_disponivel e xml_url.
  • Quando disponível, a rota responde o XML puro com Content-Type: application/xml.
  • Enquanto não houver XML autorizado/disponível, a rota retorna 404.
  • Use o XML como fonte fiscal completa; não tente recalcular impostos a partir do JSON operacional.

Referência para IAs e integradores

Contrato compacto de implementação

base_url: https://ioftalmo.empresarial.inf.br/api
auth: "Authorization: Bearer TOKEN; Accept: application/json"
content_type: application/json
limite: "240 requisições/minuto para todas as rotas; recomendado: até 200/minuto"

pessoa:
  finalidade: "cliente e/ou fornecedor; PF tipopessoa=2, PJ tipopessoa=1"
  criar: "POST /V1/tenant/pessoa"
  consultar: "GET /V1/tenant/pessoa/{codigo}"
  atualizar: "PATCH /V1/tenant/pessoa/{codigo}"
  excluir: "DELETE /V1/tenant/pessoa/{codigo}"
  campos_essenciais: [nomefantasia, razaosocial, tipopessoa, cidade_ibge, cliente, fornecedor]
  nfe_destinatario: [logradouro, endereco, numero, bairro, cep]

movimento:
  criar: "POST /V1/tenant/docmov"
  consultar: "GET /V1/tenant/docmov/{codigo}"
  atualizar: "PATCH /V1/tenant/docmov/{codigo}"
  xml: "GET /V1/tenant/docmov/{codigo}/xml"
  campos_essenciais: [empresa, estab, pessoa, dataemissao, produtos|servicos]
  produto: {item: codigo_item, qtid: numero, valor: decimal, seq: opcional}
  servico: {item: codigo_item, qtid: numero, valor: decimal, seq: opcional}
  parcela: {parcela: numero, vencimento: YYYY-MM-DD, valor: decimal}
  defaults_erp: [tipomov, docserie, carteira, condicao_pagamento, frete, indpres]
  situacao: {1: pendente, 2: concluir_e_agendar_fiscal}
  retorno_fiscal: [nfe_status, nfe_status_descricao, nfe_situacao, nfe_autorizada, nfe_cancelada, nfe_emitida, nfe_chave, nfe_protocolo]

referencias_somente_leitura:
  empresas: "GET /V1/tenant/empresa?search=texto"
  estabelecimentos: "GET /V1/tenant/estab?empresa=codigo&search=texto"
  itens: "GET /V1/tenant/item?tipo=produto|servico&search=codigo,nome,referencia,barra"
  empresa_retorna: [codigo, nome, cnpj, inscricao_estadual, inscricao_municipal]
  estabelecimento_retorna: [codigo, empresa, nome, cnpj, inscricao_estadual, inscricao_municipal]
  item_retorna: [codigo, nome, referencia, codigo_barras, tipo]

regras:
  - "Nunca envie tipomov: a API usa o padrão do estabelecimento."
  - "Em HTTP 429, respeite Retry-After e faça nova tentativa com espera progressiva."
  - "Em pessoa, envie cidade_ibge; a API resolve o código interno da cidade."
  - "Use o codigo retornado de item como item em produtos ou servicos."
  - "Ao enviar produtos, servicos ou parcelas, a lista substitui a seção existente."
  - "HTTP 200 com situacao=2 não confirma autorização fiscal; faça polling no GET."
  - "Documento fiscal válido: nfe_autorizada=true e nfe_cancelada=false."
  - "NF-e autorizada: nfe_chave e nfe_protocolo preenchidos."
  - "Falha assíncrona pode retornar o movimento para situacao=1."
  - "XML fiscal é a fonte completa de tributos; o JSON não expõe bases ou impostos calculados."

respostas: {201: criado, 200: processado, 401: token_invalido, 404: nao_encontrado_ou_xml_indisponivel, 422: validacao}