TF Fiscal

Otros documentos fiscales

MDF-e

5 endpoints

La API de MDF-e (modelo 58, layout PL-MDFe 3.00) permite emitir, consultar, cancelar y cerrar manifiestos de transporte. El MDF-e agrega NF-es y/o CT-es vinculados a una operación de transporte, soportando 4 modales: carretero, aéreo, acuaviario y ferroviario. Toda la información operativa (conductor, vehículo, contratante, CIOT, vale de peaje, pago) va en el cuerpo del /create — no hay eventos de inclusión/modificación después de la emisión.

EndpointMétodoDescripción
/api/mdfe/createPOSTEmitir MDF-e
/api/mdfe/consultPOSTConsultar situación del MDF-e
/api/mdfe/cancelPOSTCancelar MDF-e (hasta 24h después de la autorización)
/api/mdfe/closePOSTCerrar MDF-e (después de finalizar el viaje)
POST/api/mdfe/create

Emitir MDF-e

Emite un MDF-e a partir del cuerpo enviado. Los campos cMDF, cDV, cUF, dhEmi, mod, tpEmis, procEmi, verProc son calculados automáticamente por el servidor. El cliente envía únicamente los campos de negocio. Los campos serie y nMDF son opcionales: se asignan automáticamente cuando se omiten (o valen 0), o se respetan cuando se envían en la solicitud (útil para saltar la numeración, por ejemplo tras una duplicidad en la autoridad fiscal).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5: MD5(token + path + body + timestamp)
timestampstringUnix timestamp en segundos (ventana de 5 minutos)

Body — raíz

CampoTipoDescripción
ide *objectIdentificación del MDF-e
emit *objectDatos del emisor
infModal *objectInformación del modal (solo UNO de los cuatro: rodo, aereo, aquav, ferrov)
infDoc *objectDocumentos fiscales vinculados
tot *objectTotalizadores de la carga
prodPredobjectProducto predominante de la carga
segarrayInformación de seguro
lacresarrayPrecintos del MDF-e
autXMLarrayCNPJs/CPFs autorizados a acceder al XML
infAdicobjectInformación adicional (fisco y contribuyente)
infRespTecobjectResponsable técnico (CNPJ, contacto, email, etc.)

ide — Identificación

CampoTipoDescripción
tpAmb *intAmbiente: 1=producción, 2=homologación
tpEmit *intTipo del emisor: 1=transportador, 2=carga propia, 3=prestador de servicio de transporte
modal *stringModal: "1"=carretero, "2"=aéreo, "3"=acuaviario, "4"=ferroviario
UFIni *stringUF de inicio del viaje (2 letras)
UFFim *stringUF de fin del viaje
infMunCarrega[] *arrayMunicipios de carga: [{ cMunCarrega, xMunCarrega }]
infPercurso[]arrayUFs del recorrido: [{ UFPer }]
tpTranspstringTipo de transportador (carretero)
dhIniViagemstringFecha/hora de inicio del viaje (ISO 8601)
indCanalVerdestringIndicador de canal verde
indCarregaPosteriorstringIndicador de carga posterior
serieintSerie del MDF-e (3 dígitos de la clave de acceso). Opcional — autoasignada (serie de MDF-e de la empresa) cuando se omite o vale 0; respetada cuando se envía
nMDFintNúmero del MDF-e (compone la clave de acceso). Opcional — autoincrementado por el servidor cuando se omite o vale 0; respetado cuando se envía (útil para saltar la numeración, por ejemplo tras una duplicidad)

emit — Emisor

CampoTipoDescripción
CNPJ ⚠stringCNPJ del emisor (14 dígitos)
CPF ⚠stringCPF del emisor (11 dígitos)
IEstringInscripción Estadual
xNome *stringRazón social
xFantstringNombre de fantasía
enderEmitobjectDirección: { xLgr, nro, xCpl, xBairro, cMun, xMun, CEP, UF, fone, email }

infModal — Modal Carretero (modal="1")

CampoTipoDescripción
rodo.veicTracao *objectVehículo de tracción: { placa, tara, RENAVAM, capKG, capM3, tpRod, tpCar, UF, condutor[], prop }
rodo.veicTracao.condutor[] *arrayConductores: [{ xNome, CPF }] — mínimo 1
rodo.veicReboque[]arrayVehículos de remolque (misma estructura de veicTracao sin conductor)
rodo.infANTTobjectInformación de la ANTT: { RNTRC, infCIOT[], valePed, infContratante[], infPag[] }
rodo.codAgPortostringCódigo de agendamiento en el puerto
rodo.lacRodo[]arrayPrecintos del modal: [{ nLacre }]

infModal — Modal Aéreo (modal="2")

CampoTipoDescripción
aereo.nac *stringMarca de nacionalidad de la aeronave
aereo.matr *stringMatrícula de la aeronave
aereo.nVoo *stringNúmero del vuelo
aereo.cAerEmb *stringCódigo IATA del aeropuerto de embarque
aereo.cAerDes *stringCódigo IATA del aeropuerto de destino
aereo.dVoo *stringFecha del vuelo (AAAA-MM-DD)

infModal — Modal Acuaviario (modal="3")

CampoTipoDescripción
aquav.irin *stringIRIN de la embarcación
aquav.tpEmb *stringTipo de embarcación (2 dígitos). Use valores ≥ 10 para evitar el truncamiento del byte interno del Zeus (ej.: "10", "11")
aquav.cEmbar *stringCódigo de la embarcación
aquav.xEmbar *stringNombre de la embarcación
aquav.nViag *stringNúmero del viaje. No puede empezar con cero (validación del schema) — use "1", "100", etc.
aquav.cPrtEmb *stringCódigo del puerto de embarque
aquav.cPrtDest *stringCódigo del puerto de destino
aquav.prtTransstringPuerto de transbordo
aquav.tpNavstringTipo de navegación
aquav.infTermCarreg[]arrayTerminales de carga: [{ cTermCarreg, xTermCarreg }]
aquav.infTermDescarreg[]arrayTerminales de descarga
aquav.infEmbComb[]arrayEmbarcaciones de convoy: [{ cEmbComb, xBalsa }]
aquav.infUnidCargaVazia[]arrayUnidades de carga vacías
aquav.infUnidTranspVazia[]arrayUnidades de transporte vacías

infModal — Modal Ferroviario (modal="4")

CampoTipoDescripción
ferrov.trem *objectDatos del tren: { xPref, dhTrem, xOri, xDest, qVag }
ferrov.vag[] *arrayVagones: [{ pesoBC, pesoR, tpVag, serie, nVag, nSeq, TU }] — mínimo 1. Restricciones del Zeus/autoridad fiscal: serie debe tener exactamente 3 dígitos (use 100+, ej.: "100"); nVag solo acepta dígitos (long internamente, ej.: "100001"); nSeq opcional 1-3 dígitos.

infDoc — Documentos vinculados

CampoTipoDescripción
infMunDescarga[] *arrayMunicipios de descarga — mínimo 1
infMunDescarga[].cMunDescarga *stringCódigo IBGE del municipio
infMunDescarga[].xMunDescarga *stringNombre del municipio
infMunDescarga[].infNFe[]arrayNF-es vinculadas: [{ chNFe, SegCodBarras, indReentrega, infUnidTransp[], peri[] }]
infMunDescarga[].infCTe[]arrayCT-es vinculados
infMunDescarga[].infMDFeTransp[]arrayMDF-es de transporte (subcontratación)

prodPred — Producto predominante

CampoTipoDescripción
tpCarga *stringTipo de carga: "01"=granel sólido, "02"=granel líquido, "03"=refrigerada, "04"=contenerizada, "05"=carga general, "06"=neogranel, "07"=peligrosa, "08"=granel presurizado
xProd *stringDescripción del producto predominante
cEANstringGTIN/EAN
NCMstringNCM
infLotacaoobjectLotación: { infLocalCarrega{CEP,latitude,longitude}, infLocalDescarrega{...} }

tot — Totalizadores

CampoTipoDescripción
vCarga *decimalValor total de la carga (> 0)
cUnid *stringCódigo de la unidad: "01"=KG, "02"=TON
qCarga *decimalCantidad total de la carga (> 0)
qCTeintCantidad de CT-es vinculados
qNFeintCantidad de NF-es vinculadas
qMDFeintCantidad de MDF-es vinculados

* Campo obligatorio. ⚠ Al menos uno de CNPJ o CPF es obligatorio.

POST/api/mdfe/consult

Consultar situación del MDF-e

Consulta la situación del MDF-e directamente en la autoridad fiscal a partir de la clave de acceso.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chMDFe *stringClave de acceso del MDF-e (44 dígitos)

* Campo obligatorio.

POST/api/mdfe/cancel

Cancelar MDF-e

Cancela un MDF-e autorizado. Ventana: hasta 24 horas después de la autorización. No permitido si el MDF-e ya ha sido cerrado.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chMDFe *stringClave de acceso del MDF-e (44 dígitos)
xJust *stringJustificación de la cancelación (mínimo 15 caracteres por exigencia autoridad fiscal)

* Campo obligatorio.

POST/api/mdfe/close

Cerrar MDF-e

Cierra un MDF-e al final del viaje. Después del cierre, ya no es posible cancelar. Los campos dtEnc, cUF y cMun son opcionales — cuando se omiten, el sistema los infiere a partir del MDF-e original (fecha actual, UF y municipio del emisor).

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5
timestampstringUnix timestamp en segundos

Body

CampoTipoDescripción
chMDFe *stringClave de acceso del MDF-e (44 dígitos)
dtEncstringFecha del cierre (AAAA-MM-DD). Default: fecha actual
cUFintCódigo IBGE de la UF donde ocurrió el cierre. Default: UF del emisor
cMunstringCódigo IBGE del municipio donde ocurrió el cierre. Default: municipio del emisor

* Campo obligatorio.

GET/api/mdfe/get_list

Listar MDF-e (paginado)

Lista los MDF-e de la empresa con paginación. Los parámetros se pasan por query string (no en el body). El filtro de tiempo es opcional, pero si se envía requiere tanto start_create_time como end_create_time.

Headers obligatorios

HeaderTipoDescripción
tokenstringToken de la empresa emisora
signstringFirma MD5 (path incluye la query string)
timestampstringUnix timestamp en segundos

Query string

ParámetroTipoDescripción
page *intNúmero de página (≥ 1)
page_size *intTamaño de página (1–50)
start_create_timelongUnix timestamp en milisegundos — inicio (requiere end_create_time)
end_create_timelongUnix timestamp en milisegundos — fin
statusstringFiltrar por estado. Valores: "Success" (autorizado), "Canceled" (cancelado), "Voided" (cerrado), "Processing" (en proceso), "Failed" (falló), "Unknown" (desconocido)

* Campo obligatorio.