Base URL
https://ioftalmo.empresarial.inf.br/api
Use esta base em todas as chamadas.
Base URL
Use esta base em todas as chamadas.
Autenticação
Envie o token de API do usuário autorizado.
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.
Authorization: Bearer SEU_TOKEN_DE_API
Accept: application/json
Content-Type: application/jsonEnvie JSON em POST, PUT e PATCH.
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=50Empresa 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=instalacaoUse 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.
Referências do ERP
Consultas somente leitura para identificar a empresa, o estabelecimento e os itens que podem ser usados no 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.
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.
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/456A 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.
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.
São opcionais; quando omitidos, usam o padrão do tipo de movimento.
frete — modalidade
indpres — presença
{ "frete": 1, "indpres": 2 }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/9001Ao 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": [
{ "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.
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/9001Para 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.
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
NFS-e de serviço
nfe_emitida é verdadeiro para documento autorizado ou posteriormente cancelado. Para saber se ainda é fiscalmente válido, use nfe_autorizada=true e nfe_cancelada=false.
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 }
}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/xmlReferência para IAs e integradores
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}