Documentação
MCP Painel →

MDF-e · Manifesto de Documentos Fiscais · modelo 58 chave ace_

POST /mdfe/emitir

Manifesto do modal rodoviário: reúne as chaves de NF-e/CT-e de uma viagem, com veículo (tração + reboques), condutor, percurso (UFs), municípios de carga/descarga (IBGE), CIOT e seguro. Usa o mesmo certificado dos demais + o RNTRC (registro ANTT). Cobra 1 unidade por manifesto autorizado.

Config: PUT /mdfe/configuracao · {"ambiente":2,"serie_mdfe":1,"rntrc":"12345678"}. O RNTRC também pode ir em veiculo.rntrc na emissão.
Endpoints
PUT  /mdfe/configuracao   # serie, ambiente, rntrc
POST /mdfe/emitir
GET  /mdfe/{id}/xml · /mdfe/{id}/damdfe
POST /mdfe/{id}/encerrar    # OBRIGATÓRIO ao fim
POST /mdfe/{id}/cancelar
POST /mdfe/{id}/condutor    # incluir motorista
GET  /mdfe · /mdfe/{id}

Rota e municípios obrigatório

CampoDescrição
uf_inicio, uf_fimobrig.UF de início e fim da viagem
municipios_carregamento[]obrig.{codigo (IBGE 7 díg), nome} — onde carregou
municipios_descarregamento[]obrig.{codigo, nome, cep?} — onde descarrega
percurso[]opc.UFs atravessadas entre início e fim (ex.: ["MG"])
data_inicio_viagemopc.ISO-8601
tipo_emitente22=carga própria, 1=prestador de serviço

Veículo & condutor obrigatório

Campo
veiculo.placa, tara, tipo_rodado, tipo_carroceria, ufobrig.
veiculo.renavam, capacidade_kg, capacidade_m3, rntrcopc.
motorista.nome, cpfobrig.
reboques[] {placa, tara, tipo_carroceria, uf…}opc.

tipo_rodado: 01=truck, 02=toco, 03=cavalo mecânico, 04=VAN, 05=utilitário, 06=outros. tipo_carroceria: 00=não aplicável, 01=aberta, 02=fechada/baú, 03=granelera, 04=porta-contêiner, 05=sider.

Rota + veículo
{
  "uf_inicio": "RJ", "uf_fim": "SP",
  "municipios_carregamento": [
    { "codigo": "3304557", "nome": "RIO DE JANEIRO" }
  ],
  "municipios_descarregamento": [
    { "codigo": "3550308", "nome": "SAO PAULO" }
  ],
  "percurso": ["RJ", "SP"],
  "veiculo": {
    "placa": "ABC1D23", "renavam": "12345678901",
    "tara": 8000, "capacidade_kg": 15000,
    "tipo_rodado": "02", "tipo_carroceria": "00",
    "uf": "RJ", "rntrc": "12345678"
  },
  "motorista": { "nome": "JOSE CONDUTOR",
    "cpf": "12345678909" }
}

Documentos, carga e opcionais

CampoDescrição
documentos[]obrig.{tipo:"nfe"|"cte", chave (44), cod_municipio_descarga, nome_municipio_descarga}
valor_carga, peso_brutoobrig.Totais da carga (KG)
produto_predominante, tipo_cargaopc.tipo_carga 05=carga geral (padrão)
ciotopc.[{ciot, documento}] — pagamento de frete
seguroopc.{responsavel, documento_responsavel, seguradora_nome, seguradora_cnpj, apolice, averbacao}
Documentos + carga
{
  "documentos": [
    { "tipo": "nfe",
      "chave": "33260...(44)",
      "cod_municipio_descarga": "3550308",
      "nome_municipio_descarga": "SAO PAULO" }
  ],
  "produto_predominante": "MERCADORIAS EM GERAL",
  "tipo_carga": "05",
  "valor_carga": 10000.00,
  "peso_bruto": 1200.000,
  "ciot": [ { "ciot": "123456789012",
    "documento": "11222333000181" } ]
}

Encerrar, cancelar, condutor

POST /mdfe/{id}/encerrar obrigatório ao fim
POST /mdfe/{id}/cancelar
POST /mdfe/{id}/condutor

Encerrar (exigência da SEFAZ ao terminar a viagem): {"cod_municipio":"3550308","uf":"SP"} (IBGE 7 díg + UF do local). Cancelar só antes de encerrar: {"justificativa":"15+ caracteres"}. Incluir condutor (troca de motorista): {"nome":"...","cpf":"..."}.

Erros específicos

422 emissao_rejeitadaSEFAZ recusou (duplicidade, chave inválida, veículo)
422 municipio_invalidoEncerramento sem cod_municipio IBGE 7 díg
422 encerramento_rejeitado · condutor_rejeitadoEvento recusado
Fluxo típico: emitir NF-e(s) → emitir MDF-e com as chaves → transportar → (trocar motorista? incluir condutor) → ao chegar, encerrar.
Emitir + encerrar
# emitir
curl -X POST .../api/v1/mdfe/emitir \
  -H "Authorization: Bearer ace_SEU_TOKEN" \
  -d @mdfe.json

# encerrar ao fim da viagem
curl -X POST .../api/v1/mdfe/8/encerrar \
  -H "Authorization: Bearer ace_SEU_TOKEN" \
  -d '{"cod_municipio":"3550308","uf":"SP"}'
$m = $cli->mdfe()->emitir($payload);
$id = $m['mdfe_id'];
$cli->mdfe()->damdfe($id, 'damdfe.pdf');
$cli->mdfe()->incluirCondutor($id, 'NOVO', '11144477735');
$cli->mdfe()->encerrar($id, 'SP', '3550308');
R := Api.EmitirMDFe(JSONFromStr(Json));
Id := R.Int('mdfe_id');
Api.BaixarPDF('mdfe', Id, 'damdfe.pdf');
Api.Post(Format('mdfe/%d/encerrar',[Id]),
  JSONFromStr('{"cod_municipio":"3550308","uf":"SP"}')).Free;
Emitir · 200 · data
{ "mdfe_id": 8, "numero": 8, "serie": 1,
  "chave": "33260...(44)",
  "protocolo": "...", "status": "autorizada" }