Firmar XML

Referencia tecnica del endpoint Firmar XML.

Descripcion

Recibe un XML base sin firma, lo numera, firma y registra como CFE emitido. Es el equivalente cloud de POST /sign-cfe del módulo local: el contrato de request y response es compatible, por lo que la integración puede intercambiarse entre módulo local y API REST cambiando solo el host y la autenticación.

El proceso incluye:

Endpoint

Autenticación

Campos de request

CampoObligatoriedadDescripción
tipo_cfeobligatorioTipo de comprobante (ej. 101, 111)
uuidrecomendadoIdentificador externo estable del comprobante
xmlobligatorioXML base sin firma ni numeración
cod_comerciocondicionalCódigo de comercio; obligatorio si la empresa tiene más de un punto de emisión
cod_terminalcondicionalCódigo de terminal; obligatorio si la empresa tiene más de un punto de emisión
adendaopcionalTexto adicional asociado al comprobante
idEmpresacondicionalSolo necesario con JWT; con API Key se ignora

Los campos tipo_cfe, cod_comercio y cod_terminal aceptan tanto snake_case como camelCase (tipoCfe, codComercio, codTerminal) por compatibilidad.

Campos de response

Todos los campos están presentes tanto en éxito como en error. Los campos de folio y firma vienen null cuando CodigoRespuesta no es "00".

CampoCuándo tiene valorDescripción
UuidsiempreUUID recibido en el request
TipoCfesiempreTipo de comprobante procesado
SerieéxitoSerie asignada
NumeroéxitoNúmero asignado
CodigoRespuestasiempreCódigo funcional del resultado
MensajeRespuestasiempreDescripción del resultado
CodigoTerminalsiempreTerminal utilizada
CodigoComerciosiempreComercio utilizado
NumeroInicialCaeéxitoInicio del rango CAE usado
NumeroFinalCaeéxitoFin del rango CAE usado
VencimientoCaeéxitoVencimiento del CAE en formato AAAAMMDD (ej. 20280101)
NroConstanciaCaeéxitoNúmero de constancia del CAE
CfeFirmadoéxitoXML final con firma digital
DatosCodigoQréxitoURL o datos para generar el QR fiscal
CodigoSeguridadéxitoCódigo de seguridad fiscal
FechaFirmaCfeéxitoFecha y hora de la firma
ImagenQrsiempreSiempre null en esta implementación

Codigos de respuesta

CodigoRespuestaHTTPSignificado
00200Éxito. Serie y Numero vienen informados
01403Petición denegada (permisos insuficientes)
03422Comercio inválido o deshabilitado
12422Requerimiento inválido (campo faltante o incorrecto)
31422Rechazo de validación del XML
89422Terminal inválida o deshabilitada
96500Error interno (firma, persistencia o rango)

Criterio de emisión exitosa: HTTP 200 + CodigoRespuesta = "00" + Serie y Numero no nulos. Cualquier otro resultado indica que el comprobante no fue emitido.

Escenarios de error típicos

XML con totales incorrectos

Campo obligatorio faltante

cod_comercio o cod_terminal no configurados en la empresa

Sin permisos

Interoperabilidad con el módulo local

Este endpoint comparte el mismo contrato que POST /sign-cfe del módulo local Tauri, con estas diferencias:

AspectoMódulo local (/sign-cfe)API REST (/comprobante/firmarXml)
AutenticaciónSin auth (localhost)JWT o API Key
idEmpresaDerivado del perfil localDel body (JWT) o de la API Key
emails, impresora, send_nowFuncionalesAceptados, ignorados
Nombres de campos requestsnake_casesnake_case o camelCase
Nombres de campos responsesnake_casePascalCase
VencimientoCaeCon guiones (2028-01-01)Sin guiones (20280101)