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.
| Método | Caminho | Escopo |
|---|---|---|
POST | /services/v1/integracoes/mdfes | mdfes:emitir |
GET | /services/v1/integracoes/mdfes | mdfes:ler |
GET | /services/v1/integracoes/mdfes/{id} | mdfes:ler |
GET | /services/v1/integracoes/mdfes/{id}/xml | mdfes:ler |
GET | /services/v1/integracoes/mdfes/{chave}/eventos | mdfes:ler |
POST | /services/v1/integracoes/mdfes/{chave}/eventos | mdfes:eventos |
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: temchave,protocoloe, em seguida, o XML (xml_disponivel). Falta encerrar.REJEITADO:codigo_status_sefazemotivo_sefazdizem 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-rsousvc-sp. Oofflinevale 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 deconteudo.emitente.cnpjna conta.403empresa_fora_da_integracao: a empresa existe, mas o CNPJ não está entre os da credencial.422certificado_ausente: a empresa estápendente_certificado. Envie o certificado e emita de novo.422ambiente_indisponivel: credencial de produção com a conta ainda em homologação.422de validação, comdata.errors, ou com amessagedo dado que falta.- Repetir a mesma
Idempotency-Keydevolve 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, como2026-10-05T14:30:00-04:00). Sem ele, desde o primeiro.cursor: oproximo_cursorda resposta anterior. Prevalece sobreatualizado_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) ecMun(7 dígitos) do local do encerramento.cancelamento:justificativa, de 15 a 255 caracteres.inclusao-condutor:xNomeeCPFdo condutor.inclusao-dfe:cMunCarrega,xMunCarregaedocumentos, uma lista comcMunDescarga,xMunDescargaechNFe.
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).422chave_de_cte: a chave é de um CT-e (use as rotas de CT-e).422de validação:tipofora dos quatro acima (é o caso decarta-correcao, que não existe para MDF-e), ou campo do evento faltando.422documento_encerrado: o MDF-e já está encerrado e não aceita novos eventos.409cancelamento_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-Keydevolve 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.".