Pular para o conteúdo

MDF-e ​

Emita MDF-e pelas empresas da conta, acompanhe a autorização por polling, baixe o XML e registre cancelamento, encerramento, inclusão de condutor e inclusão de DF-e. Precisa de uma empresa pronta, com o certificado enviado. Para ser avisado das mudanças, cadastre um webhook.

Os caminhos abaixo são completos, a partir do domínio https://api.logmonitor.com.br. As escritas (POST) levam assinatura e Idempotency-Key. O {id} é o UUID do documento, devolvido na emissão. A {chave} é a chave de acesso, com 44 dígitos. As rotas de MDF-e exigem também que o plano da conta inclua a API de emissão (403 feature_indisponivel, veja escopos).

O encerramento é obrigatório e é responsabilidade do cliente

A API não encerra o MDF-e sozinha. MDF-e autorizado e não encerrado impede novas emissões do mesmo veículo e gera multa. Quando a viagem terminar, envie o evento encerramento.

Situações ​

O campo situacao do documento segue o emissor:

ENFILEIRADO → AUTORIZADO ou REJEITADO. Depois de autorizado, o MDF-e vira ENCERRADO (encerramento) ou CANCELADO.

  • ENFILEIRADO: a emissão foi aceita e a SEFAZ ainda não deu o veredito.
  • AUTORIZADO: tem chave, protocolo e, em seguida, o XML (xml_disponivel). Falta encerrar.
  • REJEITADO: codigo_status_sefaz e motivo_sefaz dizem o porquê. Corrija o dado e emita de novo.
  • ENCERRADO: situação final. Não aceita novos eventos.
  • CANCELADO: o cancelamento foi homologado.

Emitir ​

Emitir um MDF-e ​

POST /services/v1/integracoes/mdfes · mdfes:emitir

Envia o MDF-e para a SEFAZ e responde 202, sem esperar o veredito. A empresa é a do CNPJ de conteudo.emitente.cnpj; o ambiente é o da credencial. Acompanhe a autorização por detalhe ou lista até AUTORIZADO, e depois encerre o MDF-e.

json
{
  "conteudo": {
    "identificacao": {
      "serie": "1",
      "numero": 1234
    },
    "emitente": {
      "cnpj": "00000000000000",
      "ie": "000000000",
      "razaoSocial": "TRANSPORTADORA EXEMPLO LTDA"
    },
    "modal": {
      "rodoviario": {
        "veiculoTracao": {
          "placa": "AAA0A00",
          "uf": "MT"
        }
      }
    },
    "documentos": [
      {
        "chNFe": "00000000000000000000000000000000000000000000"
      }
    ],
    "totais": {
      "qtdNFe": 1,
      "valorCarga": 64101.33
    }
  }
}
  • conteudo: o MDF-e, no mesmo leiaute do emissor: identificação, emitente, modal, documentos e totais.
  • conteudo.emitente.cnpj: o CNPJ (só dígitos) da empresa emitente.
  • tipoEmissao: opcional. normal (padrão), svc-rs ou svc-sp. O offline vale só para CT-e.

Tipos de emissão extintos

epec e fsda foram extintos pela SEFAZ. Enviar qualquer um dos dois devolve 422 de validação, com a recusa em data.errors.tipoEmissao.

A mesma numeração (série e número) já enviada não é reenviada: a resposta traz situacao_envio existente.

Resposta 202 (data): o documento (veja o detalhe) em ENFILEIRADO, mais situacao_envio.

Erros:

  • 404: não há empresa com o CNPJ de conteudo.emitente.cnpj na conta.
  • 403 empresa_fora_da_integracao: a empresa existe, mas o CNPJ não está entre os da credencial.
  • 422 certificado_ausente: a empresa está pendente_certificado. Envie o certificado e emita de novo.
  • 422 ambiente_indisponivel: credencial de produção com a conta ainda em homologação.
  • 422 de validação, com data.errors, ou com a message do dado que falta.
  • Repetir a mesma Idempotency-Key devolve a mesma resposta (idempotência).

Veja a lista completa em respostas e erros.

Acompanhar ​

Listar ​

GET /services/v1/integracoes/mdfes · mdfes:ler

Acompanhamento por polling, em ordem de alteração (do mais antigo ao mais novo). Parâmetros de consulta, todos opcionais:

  • atualizado_desde: só os MDF-e alterados depois deste instante (ISO 8601, como 2026-10-05T14:30:00-04:00). Sem ele, desde o primeiro.
  • cursor: o proximo_cursor da resposta anterior. Prevalece sobre atualizado_desde.
  • por_pagina: de 1 a 100 (padrão 50).

Leia a página, guarde o proximo_cursor e use-o na chamada seguinte. Enquanto tem_mais for verdadeiro, há mais itens. Quando tem_mais for falso, o mesmo cursor continua dali na próxima consulta. Veja também acompanhar.

Resposta 200 (data): data (os documentos, cada um como no detalhe), por_pagina, tem_mais e proximo_cursor.

Detalhe ​

GET /services/v1/integracoes/mdfes/{id} · mdfes:ler

O {id} é o UUID que a emissão devolveu. Um número não serve (404). Enquanto não há veredito, cada chamada consulta o emissor: use esta rota para o polling até AUTORIZADO ou REJEITADO.

json
{
  "id": "00000000-0000-0000-0000-000000000000",
  "chave": "00000000000000000000000000000000000000000000",
  "serie": "1",
  "numero": 1234,
  "situacao": "AUTORIZADO",
  "codigo_status_sefaz": 100,
  "motivo_sefaz": "Autorizado o uso do MDF-e",
  "protocolo": "000000000000000",
  "ambiente": "homologacao",
  "xml_disponivel": true,
  "cancelamento_solicitado_em": null,
  "criado_em": "2026-10-01T17:11:40+00:00",
  "atualizado_em": "2026-10-01T17:11:58+00:00",
  "finalizado_em": null
}

Resposta 200 (data): o documento acima. chave e protocolo só existem depois da autorização. Depois do encerramento, situacao passa a ENCERRADO.

Erros: 404 "MDF-e não encontrado.": o UUID não existe, é de outra conta ou de empresa fora dos CNPJs da credencial.

Baixar o XML ​

GET /services/v1/integracoes/mdfes/{id}/xml · mdfes:ler

Resposta 200: o XML autorizado (application/xml, fora do envelope), como anexo <id>.xml.

Erros: 404 "O XML do MDF-e ainda não está disponível.": antes da autorização, ou documento de outra conta.

Eventos ​

Registrar um evento ​

POST /services/v1/integracoes/mdfes/{chave}/eventos · mdfes:eventos

Registra o evento num MDF-e autorizado. O tipo escolhe qual:

  • encerramento: dtEnc (data), cUF (2 dígitos) e cMun (7 dígitos) do local do encerramento.
  • cancelamento: justificativa, de 15 a 255 caracteres.
  • inclusao-condutor: xNome e CPF do condutor.
  • inclusao-dfe: cMunCarrega, xMunCarrega e documentos, uma lista com cMunDescarga, xMunDescarga e chNFe.
json
{
  "tipo": "encerramento",
  "dtEnc": "2026-10-05",
  "cUF": "51",
  "cMun": "5103403"
}
json
{
  "tipo": "inclusao-condutor",
  "xNome": "CONDUTOR EXEMPLO",
  "CPF": "00000000000"
}

O emissor responde 202, e o veredito vem depois: consulte os eventos. Depois do encerramento, a situacao do detalhe passa a ENCERRADO.

Resposta 202 (data): idEvento e o estado do envio.

Erros:

  • 404: a chave não é de um MDF-e desta credencial (outra conta, ou empresa fora dos CNPJs dela).
  • 422 chave_de_cte: a chave é de um CT-e (use as rotas de CT-e).
  • 422 de validação: tipo fora dos quatro acima (é o caso de carta-correcao, que não existe para MDF-e), ou campo do evento faltando.
  • 422 documento_encerrado: o MDF-e já está encerrado e não aceita novos eventos.
  • 409 cancelamento_ja_solicitado: o cancelamento já foi pedido; aguarde o veredito da SEFAZ.
  • 403: a credencial não pode fazer o evento neste documento (recusas 403).
  • Repetir a mesma Idempotency-Key devolve a mesma resposta (idempotência).

Listar os eventos ​

GET /services/v1/integracoes/mdfes/{chave}/eventos · mdfes:ler

Resposta 200 (data): a lista de eventos que o emissor registrou, cada um com tipo, codigoStatusSefaz, motivoSefaz e numeroProtocolo. Sem eventos, lista vazia.

json
[
  {
    "tipo": "encerramento",
    "codigoStatusSefaz": 135,
    "motivoSefaz": "Evento registrado e vinculado a MDF-e",
    "numeroProtocolo": "000000000000000"
  }
]

Erros: 404 "MDF-e não encontrado.".

Documentação da API da Subcontratei.