Welcome to LemorAPI 🚀

Integração inteligente com faturação eletrônica e SAFT

API Illustration

Apresentação

A Lemor API é uma interface de programação desenvolvida para permitir a integração de sistemas externos com o serviço de faturação eletrónica e SAFT. Através desta API, desenvolvedores podem automatizar processos de emissão de documentos fiscais, comunicação com sistemas legais e geração de dados fiscais, de forma simples, segura e padronizada.

Objetivos

  • Permitir a integração de sistemas externos com o sistema de faturação
  • Automatizar a emissão de faturas e documentos fiscais
  • Garantir conformidade com os requisitos fiscais (SAFT e FE)
  • Reduzir erros manuais e aumentar a eficiência operacional

O que a API facilita

  • Emitir faturas automaticamente a partir de qualquer sistema
  • Gerar documentos fiscais de forma padronizada
  • Integrar sistemas como ERPs, sistemas escolares, POS e apps móveis
  • Controlar e gerir faturação remotamente
  • Automatizar processos fiscais sem intervenção manual

Introdução ao uso

A Lemor API foi desenvolvida para ser simples de integrar e utilizar. Antes de começar a utilizar os endpoints disponíveis, é necessário possuir credenciais de acesso válidas

Autenticação

A API utiliza Basic Authentication (Basic Auth) para autenticação. Para cada requisição, deve ser enviado o cabeçalho: Authorization: Basic base64(user_name:code).

Credenciais necessárias:

  • user_name → Identificador do utilizador
  • code → Chave de acesso (senha da API)
Observações Importantes:
  • Todas as requisições devem incluir autenticação.
  • Requisições sem credenciais válidas serão rejeitadas.
  • Recomenda-se não expor as credenciais no frontend.
Teste inicial da API
GET https://lemorapi.com/api/teste
Exemplo de requisição (cURL)
curl -X GET https://lemorapi.com/api/teste \
  -u user_name:code
Resposta esperada
{
    "mesangem": "welcome",
    "status": 200
}
Validação

Se a resposta for retornada corretamente:

  • As credenciais estão válidas
  • A autenticação está funcionando
  • A API está pronta para uso

Solicitar Série

URL https://lemorapi.com

Este endpoint é responsável por solicitar a criação/autorização de uma série de documentos fiscais eletrónicos para uma determinada empresa e estabelecimento.

Produção:

POST/api/v1/fe/solicitarSerie

Homologação:

POST/api/v1/hml/fe/solicitarSerie
Campo Tipo Obrigatório Descrição
companyToken string Sim Token único que identifica a empresa no sistema.
seriesYear string Sim Ano da série a ser criada (ex: 2026).
documentType string Sim Tipo de documento fiscal (ex: RG, FT, FR, etc.).
establishmentNumber string Sim Identificador do estabelecimento (ex: SEDE, FILIAL1).
seriesContingencyIndicator string Sim Indicador de contingência: N (Normal) ou S (Contingência).
200 OK 401 Token inválido
Request (Corpo da Requisição)
{
    "companyToken": "7ab54db0-b223-46be-aba9-2a58998af53d",
    "seriesYear": "2026",
    "documentType": "RG",
    "establishmentNumber": "SEDE",
    "seriesContingencyIndicator": "N"
}
Response (Resposta de Sucesso)
{
    "resultCode": 1,
    "errorList": [""],
    "seriesFEResult": {
        "seriesCode": "FT3726S5655N",
        "authorizedQuantity": "999999999999",
        "firstDocumentNo": "1",
        "lastDocumentNo": "999999999999"
    }
}

Registro de Faturas

URLhttps://lemorapi.com

Este endpoint é responsável por submeter os dados das faturas para processamento e selagem no sistema.

Produção:

POST/api/v1/fe/registrarFatura

Homologação:

POST/api/v1/hml/fe/registrarFatura

Content-Type:

application/json

Atributos do Cabeçalho (Root)

Atributo Tipo Obrigatório Descrição
companyToken String Sim Token único de identificação da empresa.
invoices Array Sim Lista de objetos contendo os dados das faturas.

Atributos da Fatura (invoices)

Campo Tipo Obrigatório Descrição
documentNo string Sim Número do documento (Ex: FT3726S5647N/35).
documentStatus string Sim Estado: N (Normal), A (Anulado).
documentDate Date Sim Data no formato AAAA-MM-DD.
documentType string Sim FT, FR, RG, NC.
eacCode string Sim Código de atividade económica (CAE).
customerTaxID string Sim NIF do cliente (ou 999999999).
lines Array Sim Lista de itens/linhas da fatura.

Atributos das Linhas (lines)

Campo Tipo Obrigatório Descrição
productCode string Sim Código interno do produto.
productDescription string Sim Descrição detalhada do item.
quantity Numeric Sim Quantidade (Mín: 0.01).
unitOfMeasure string Sim Unidade de medida (UN, KG, etc).
unitPrice Numeric Sim Preço unitário líquido.
unitPriceBase Numeric Sim Preço unitário de tabela.
taxType String Sim IVA, IS, IEC, CEOC, NS.
taxCountryRegion String Sim Região (Padrão: AO).
taxCode String Sim NOR, ISE, INT, RED, OUT.
taxPercentage Numeric Sim Percentagem (0 a 14).
settlementAmount Numeric Sim Valor de desconto na linha.
reason String Não Motivo de isenção (Obrigatório se ISE).
O requestID deve ser guardado para consultas futuras.
Request (Corpo da Requisição) (JSON)
{
    "companyToken": "7ab54db0-b223-46be-aba9-2a58998auuuu",
    "invoices": [
        {
            "documentNo": "FT3726S5647N/35",
            "documentStatus": "N",
            "documentDate": "2026-03-18",
            "documentType": "FT",
            "eacCode": "85211",
            "customerTaxID": "999999999",
            "lines": [
                {
                    "productCode": "P001",
                    "productDescription": "Calça Jeans",
                    "quantity": 2,
                    "unitOfMeasure": "UN",
                    "unitPrice": 9500.00,
                    "unitPriceBase": 10000.00,
                    "taxType": "IVA",
                    "taxCountryRegion": "AO",
                    "taxCode": "NOR",
                    "taxPercentage": 14,
                    "settlementAmount": 1000.00,
                    "reason": "IVA-Regime Simplificado"
                }
            ]
        }
    ]
}
Resposta (Sucesso)
{
    "requestID": "202600001517846",
    "errorList": [""]
}

Obter Estado da Fatura

URLhttps://lemorapi.com

Permite verificar o estado de processamento de um lote de faturas enviado anteriormente, utilizando o ID da requisição.

Produção:

POST/api/v1/fe/obterEstadoFatura

Homologação:

POST/api/v1/hml/fe/obterEstadoFatura

Content-Type:

application/json

Atributos da Requisição (Body)

Atributo Tipo Obrigatório Descrição
companyToken String Sim Token único de identificação da empresa.
requestID String Sim ID da requisição retornado no registro da fatura.

Atributos da Resposta

Atributo Tipo Obrigatório Descrição
resultCode String - Código de resultado (Ex: 0 para Sucesso).
taxRegistrationNumber String - NIF da empresa emitente..
documentStatusList Array - Lista com o estado individual de cada documento.
documentStatus String - Estado do documento (Ex: V = Válido e I = Invalido).
requestErrorList Array - Lista de erros gerais da submissão.
errorList Array - Erros específicos de um documento dentro do lote.

Resposta

O sistema retornará o status atual do processamento das faturas.

200 OK 404 Requisição não encontrada
REQUEST (Corpo da requisição)
{
    "companyToken": "7ab54db0-b223-46be-aba9-2a58998af53d",
    "requestID": "202600001447052"
}
Response (Resposta de sucesso)
{
    "requestID": "202600001516757",
    "resultCode": "0",
    "taxRegistrationNumber": "003699512CE037",
    "documentStatusList": [
        {
            "documentNo": "FT FT3726S5647N/35",
            "documentStatus": "V",
            "errorList": [""]
        }
    ],
    "requestErrorList": [""],
    "successRequestID": ""
}

Consultar Fatura

URLhttps://lemorapi.com

Permite consultar uma fatura registrada com sucesso.

Produção:

POST/api/v1/fe/consultarFatura

Homologação:

POST/api/v1/hml/fe/consultarFatura

Atributos da Requisição

Atributo Tipo Obrigatório Descrição
companyToken String Sim Token único de identificação da empresa.
requestID String Sim ID da requisição retornado no registro da fatura.

Nível Principal (Root)

Atributo Tipo Descrição
documentNo String Número do documento consultado.
documentStatus String Estado (N=Normal, A=Anulado).
document Object Objeto com detalhes completos.
documentStatusList Array Lista de estados adicionais.
errorList Array Lista de erros caso existam.

Objeto: document


Atributo Tipo Descrição
documentNo String Número da fatura.
documentStatus String Estado do documento.
documentType String Tipo (FT, FR, etc).
documentDate String Data da fatura.td>
systemEntryDate String Data de entrada no sistema.
reportUrl String URL do relatório PDF.
customerName String Nome do cliente.
customerTaxID String NIF do cliente.
customerCountry String País do cliente.
companyName String Nome da empresa emitente.
softwareValidationNo String Nº validação AGT.
jwsSignature String Assinatura JWS.
taxRegistrationNumber String NIF da empresa emitente.
documentTotals Object Objeto com os totais.
lines Array Lista de linhas da fatura.

Objeto: documentTotals

Atributo Tipo Descrição
taxPayable String Valor total de impostos.
netTotal String Total líquido.
grossTotal String Total bruto.
currency Object Detalhes da moeda.

Objeto: lines (Itens)

Atributo Tipo Descrição
lineNumber String Número da linha.
productCode String Código do produto.
productDescription String Descrição do produto.
quantity String Quantidade.
unitOfMeasure String Unidade de medida.
unitPrice String Preço unitário líquido.
unitPriceBase String Preço unitário base.
debitAmount String Valor a débito.
creditAmount String Valor a crédito.
settlementAmount String Valor de desconto.
currency Array Lista de impostos da linha.

Objeto: taxes (Dentro de lines)

Atributo Tipo Descrição
taxType String Tipo de imposto (Ex: IVA).
taxCountryRegion String Região (AO).
taxCode String Código (ISE, NOR, etc).
taxBase String Base de cálculo.
taxPercentage String Percentagem.
taxAmount String Valor do imposto.
taxContribution String Contribuição adicional.

Resposta

O sistema retornará o status atual do processamento das faturas.

200 OK 404 Fatura não encontrada
REQUEST (Corpo da requisição)
{
    "companyToken": "7ab54db0-b223-46be-aba9-2a58998af53d",
    "invoiceNo": "FT FT3726S5519N/28"
}
RESPONSE (Resposta de sucesso)
{
    "documentNo": "FT FT3726S5519N/28",
    "documentStatus": "N",
    "document": { ... }
}

Registrar Fatura (SAFT)

URLhttps://lemorapi.com

Produção:

POST/api/v1/saft/registrarFatura

Homologação:

POST/api/v1/hml/saft/registrarFatura

Descrição de Todos os Atributos (Draft)

Campo Tipo Obrigatório Descrição Detalhada
companyToken String Sim Token de identificação da empresa cadastrada no sistema.
invoces Array (Required) Sim Objeto principal que contém os dados do documento fiscal.
documentType Array Sim Tipo de documento: (FT, FR, FP, RC, NC), Fatura, Fatura-Recibo, Proforma, Recibo ou Nota de Crédito.
customerTaxID String (Required) Sim NIF do cliente. Use 999999999 para consumidor final.
paymentMethod String Sim Meio de pagamento, (CC, CD, CH, MB, NU, TB, OU), (Ex: NU = Numerário, TB = Transferência).
documentDate Y-m-d H:i:s Sim Data de emissão. Obrigatória se for enviado um hash anterior.
systemEntryDate DateTime Sim Data e hora da gravação do documento no sistema de origem.
sales_operator String (Required) Sim Nome do operador ou utilizador que emitiu a fatura.
customerName String (Required) Sim Nome ou Razão Social do cliente.
customerNumber String (Required) Sim Número identificador do cliente no software de origem.
Campo Tipo Obrigatório Descrição Detalhada
documentVersion Boolean Sim Define a versão do layout do documento.
withholding_tax Numeric (min: 0) Sim Valor da Retenção na Fonte, caso exista.
purchase_order_number String (Required) Sim Referência da Nota de Encomenda do cliente.
message String (Required) Sim Observações ou notas de rodapé que aparecerão no documento.
iban String (Required) Sim IBAN da conta bancária para recebimento.
account_number String (Required) Sim Número da conta bancária associada.
reference.documentNo String Sim Para Notas de Crédito, refere o documento original. Formato: 'FT SERIE/NUMERO'.
hash1 String Assinatura (Hash) do documento anterior na sequência da série.
hash2 String Chave de controle do encadeamento de segurança.
hash3 String Chave de controle do encadeamento de segurança.

Itens do Documento (invoces.lines)

Campo da Linha Regra Obrigatório Descrição
productCode String (Required) sim Código identificador do produto ou serviço.
productDescription String (Required) sim Nome ou descrição detalhada do item.
quantity Numeric (min: 0.01) sim Quantidade faturada (não pode ser zero).
unitOfMeasure String (Required) sim Unidade de medida (Ex: UN, KG, CX).
unitPrice Numeric (min: 1) sim Preço unitário antes de impostos e descontos.
taxType String sim Tipo de imposto aplicado à linha (IVA).
taxCountryRegion AO (Fixed) sim Região fiscal (Angola).
taxCode String sim NOR para Taxa Normal ou ISE para Isenção.
taxPercentage double sim Percentagem do imposto aplicado (0 a 14).
settlementAmount Numeric sim Valor monetário do desconto aplicado à linha.
reason String Motivo da isenção. Obrigatório se taxCode for ISE.

Resposta

NOTA DE SEGURANÇA: É CRÍTICO que a sua aplicação armazene todos os campos abaixo. Eles são necessários para autenticar a integridade do documento em consultas futuras e para a geração de relatórios SAFT-AO.

200 OK 404 Requisição não encontrada
Payload de Requisição (JSON)
{
    "companyToken": "7ab54db0-b223-46be-aba9-2a58998af53d",
    "invoices": {
        "documentDate": "2026-01-31 23:45:10",
        "documentType": "FT",
        "systemEntryDate": "2026-03-19T22:00:00Z",
        "sales_operator": "Nelson M. Zeferino",
        "customerTaxID": "999999999",
        "customerName": "Desconhecido",
        "customerNumber": "999999999",
        "documentVersion": true,
        "withholding_tax": 0,
        "purchase_order_number": "PO nº 2026/001",
        "message": "Factura Referente ao Mes de JANEIRO de 2026...",
        "iban": "004000004078368915",
        "account_number": "1234567891011",
        "paymentMethod": "NU",
        "lines": [
            {
                "productCode": "P001",
                "productDescription": "Caneta Azul",
                "quantity": 2,
                "unitOfMeasure": "UN",
                "unitPrice": 250.00,
                "taxType": "IVA",
                "taxCountryRegion": "AO",
                "taxCode": "NOR",
                "taxPercentage": 14,
                "settlementAmount": 100,
                "withholding_tax": 6.5
            }
        ]
    }
}
Resposta do Sistema (Success Response)
{
    "status": true,
    "documentNo": "FT HSC2026/26",
    "documentDate": "2026-03-22 01:31:51",
    "documentSatus": "N",
    "taxPayable": "126.00",
    "netTotal": "15900.00",
    "grossTotal": "16026.00",
    "hash1": "Qn03+uncpeDbhjcbDSs9bhum5TIgY4Rgp0e2SlBx5qniJTRKB5ew6YMuvuKn56Dh...",
    "hash2": "FVEOcK32zBrcCOe/dcVY+qrbzDEy/RoTVQO/AGWvjSd+hX+cT7PrMZU6CI9VEX+RIjXqNOtO80F11qHjGIs2rQyYUZV0KKmlGoK7+mYV2qRree5QbyQUTbmqJPVNdSeo9Q9DhiPssmfU+DYPG0ea4lfm4UqOtiBV8Y9wECW0dxY=",
    "hash3": "Fr+o"
}

Imprimir Fatura

URLhttps://lemorapi.com

Produção:

POST/api/v1/saft/imprimirFatura

Homologação:

POST/api/v1/hml/saft/imprimirFatura

Descrição de Todos os Atributos (Draft)

Campo Tipo Obrigatório Descrição Detalhada
companyToken String Sim Token de identificação da empresa cadastrada no sistema.
invoces Array (Required) Sim Objeto principal que contém os dados do documento fiscal.
documentType String Sim Tipo de documento: (FT, FR, FP, RC, NC), Fatura, Fatura-Recibo, Proforma, Recibo ou Nota de Crédito.
invoice_model string Sim Modelo da Fatura: (md1, md2, md3), md1 = modelo 1 no formato a4, md2 = modelo 2 no formato a4, md3 = modelo 3 no formato rolo.
customerTaxID String (Required) Sim NIF do cliente. Use 999999999 para consumidor final.
paymentMethod String Sim Meio de pagamento, (CC, CD, CH, MB, NU, TB, OU), (Ex: NU = Numerário, TB = Transferência).
documentDate Y-m-d H:i:s Sim Data de emissão. Obrigatória se for enviado um hash anterior.
systemEntryDate DateTime Sim Data e hora da gravação do documento no sistema de origem.
sales_operator String (Required) Sim Nome do operador ou utilizador que emitiu a fatura.
customerName String (Required) Sim Nome ou Razão Social do cliente.
customerNumber String (Required) Sim Número identificador do cliente no software de origem.
Campo Tipo Obrigatório Descrição Detalhada
documentVersion Boolean Sim Define a versão do layout do documento.
withholding_tax Numeric (min: 0) Sim Valor da Retenção na Fonte, caso exista.
purchase_order_number String (Required) Sim Referência da Nota de Encomenda do cliente.
message String (Required) Sim Observações ou notas de rodapé que aparecerão no documento.
iban String (Required) Sim IBAN da conta bancária para recebimento.
account_number String (Required) Sim Número da conta bancária associada.
reference.documentNo String Sim Para Notas de Crédito, refere o documento original. Formato: 'FT SERIE/NUMERO'.
hash1 String Assinatura (Hash) do documento anterior na sequência da série.
hash3 String Chave de controle do encadeamento de segurança.

Itens do Documento (invoces.lines)

Campo da Linha Regra Obrigatório Descrição
productCode String (Required) sim Código identificador do produto ou serviço.
productDescription String (Required) sim Nome ou descrição detalhada do item.
months String Não String Dos Meses de Serviços Mensais.Ex: de Janeiro a Desezmbro. só para invoice_model (md2 e md3).
quantity Numeric (min: 0.01) sim Quantidade faturada (não pode ser zero).
unitOfMeasure String (Required) sim Unidade de medida (Ex: UN, KG, CX).
unitPrice Numeric (min: 1) sim Preço unitário antes de impostos e descontos.
taxType String sim Tipo de imposto aplicado à linha (IVA).
taxCountryRegion AO (Fixed) sim Região fiscal (Angola).
taxCode String sim NOR para Taxa Normal ou ISE para Isenção.
taxPercentage double sim Percentagem do imposto aplicado (0 a 14).
settlementAmount Numeric sim Valor monetário do desconto aplicado à linha.
reason String Motivo da isenção. Obrigatório se taxCode for ISE.

Resposta

NOTA: O Sistema Retrona um PDF em Streaming

200 OK 404 Fatura não encontrada
Payload de Requisição (JSON)
{
  "companyToken": "7ab54db0-b223-46be-aba9-2a58998af53d",
  "invoces": {
    "documentDate": "2026-01-31 23:45:10",
    "documentType": "FT",
    "dinvoice_model": "md1",
    "systemEntryDate": "2026-03-19T22:00:00Z",
    "sales_operator": "Nelson M. Zeferino",
    "customerTaxID": "999999999",
    "customerName": "Desconhecido",
    "customerNumber": "999999999",
    "documentVersion": true,
    "purchase_order_number": "PO nº 2026/001",
    "message": "Factura Referente ao Mes de JANEIRO de 2026...",
    "iban": "004000004078368915",
    "account_number": "1234567891011",
    "paymentMethod": "NU",
    "documentNo": "FR HSC2026/3",
    "hash1": "RbrAEB+si5rXhMSfi+KpDHLfPYLUaPWRHFatTBKZF1fe2Gf4BvKL8g3/MaD7SETC/1GcR2st5sQMJZH1ZU7FO4mT1rHleFgzoXzzz2SSrdcl8Ve0ufnynNINuKbHIPqmwacoiTgU4mb7eiuEfZTJyFaJTbi9+clZIktyZZMMR8A=",
    "hash3": "Fr+o",
    "lines": [
      {
        "productCode": "P001",
        "productDescription": "Caneta Azul",
        "months": "De Janeiro a Dezembro",
        "quantity": 2,
        "unitOfMeasure": "UN",
        "unitPrice": 250.00,
        "taxType": "IVA",
        "taxCountryRegion": "AO",
        "taxCode": "NOR",
        "taxPercentage": 14,
        "settlementAmount": 100,
        "withholding_tax": 0
      }
    ]
  }
}

Códigos de Erros

A LemorAPI utiliza os seguintes códigos de erro padronizados para facilitar o debug e o tratamento de exceções na sua aplicação.

Erro Descrição
400 Bad Request. Requisição inválida. Faltam dados obrigatórios.
401 Unauthorized. Token inválido ou ausente.
403 Forbidden. Sem permissão para acessar este recurso.
404 Not Found. Recurso não encontrado.
422 Unprocessable Entity. Erros de validação.
500 Internal Server Error. Falha inesperada nos servidores.
Exemplo de Erro 400
{
    "type": "https://api.lemor.io/errors/invalid-parameters",
    "title": "Parâmetros inválidos",
    "status": 400,
    "detail": "O campo 'amount' é obrigatório",
    "invalid_params": [
        { "name": "amount", "reason": "required" }
    ]
}