TF Fiscal
Documentación

Verificación de NF-e

Verificación de XML

Envía el XML de la NF-e; devuelve el veredicto de nivel 1 y los datos de la factura e inicia la verificación en la SEFAZ.

POST/openapi/v3/consultas/nf-e/xml
Requiere las cabeceras de firma token, timestamp y sign, vea Autenticación.

Envía el XML sin procesar de la NF-e. Devuelve de forma síncrona el veredicto de nivel 1 y los datos de la factura ya interpretados; si el nivel 1 se aprueba, la verificación de nivel 2 en la SEFAZ empieza automáticamente y el veredicto final llega por el webhook invoice.verify.completed (vea Verificación de NF-e).

HTTP 200 significa que la solicitud fue aceptada, no que la factura fue aprobada. Un XML bien formado que no supera la validación también devuelve 200; el veredicto está en el bloque validation. Nunca decida la validez por el estado HTTP.

Cabeceras

Content-Type*
stringTipo del cuerpo
forceRevalidate
boolNueva verificación forzada

* Campo obligatorio

200
Solicitud aceptada. Datos de la factura interpretados más el bloque validation con el veredicto de nivel 1. Incluye los casos en que la validación falló: compruebe validation.validationStatus y validation.errors.
tipo
stringTipo de documento
modelo
stringModelo del documento
status
stringSituación fiscal
statusDescription
stringDescripción del estado
ambienteEmissao
stringAmbiente de emisión
numero
stringNúmero de la factura
serie
stringSerie
dataEmissao
stringFecha de emisión
tipoOperacao
stringTipo de operación (tpNF), el sentido de la mercancía visto por el emisor
chaveAcesso
stringClave de acceso
objectEmisor
objectDestinatario
arrayÍtems
dataAutorizacao
stringFecha de autorización
objectProtocolo de autorización
valorTotal
numberImporte neto de la factura
objectVeredicto de nivel 1

  • Preferible: el documento completo autorizado por la SEFAZ, con el protocolo de autorización. Una factura sin el protocolo también se acepta: genera un aviso PROTOCOL_MISSING, pero se procesa con normalidad.
  • Límites estrictos: máximo 1 MB, solo UTF-8, DTD prohibido (cualquier <!DOCTYPE se rechaza de inmediato).
  • Firma: el cuerpo participa en la firma tras eliminar todos los CR y LF, mientras que el cuerpo enviado permanece sin cambios:
text
sign = md5Hex(app_secret + "/openapi/v3/consultas/nf-e/xml" + xmlSinCrLf + timestamp)

La cabecera forceRevalidate no participa en la firma. Reglas completas en Autenticación.