Emitir comprobante
Comprobantes - Emision
Emision, anulacion y cobro de comprobantes.
Descripcion
Endpoint para emitir comprobantes fiscales electrónicos (CFE). Valida los permisos del usuario y las políticas aplicables, genera el XML del comprobante, lo firma electrónicamente y lo registra en el sistema. Devuelve los datos del CFE emitido incluyendo serie, número, CAE y código QR.
El proceso incluye:
- Validación de permisos y límites de uso
- Generación y firma electrónica del XML
- Registro del comprobante en el sistema
- Asociación opcional con caja existente
- Devolución de datos para impresión y consulta
Cambio de contrato (2026-02-17)
Desde el 17 de febrero de 2026, el objeto cfe.totales es opcional en este endpoint.
- Si
cfe.totalesviene en el request, el sistema lo usa tal cual y no recalcula. - Si
cfe.totalesno viene, o viene vacío ({}), el sistema calcula totales automáticamente a partir decfe.detallespara generar el XML. - Si
cfe.emisorno viene, o viene sinruc, el sistema lo completa automáticamente con datos de la empresa/sucursal. - Para ese emisor automático, la sucursal se resuelve por
idEmpresa + codComercio. - El
codigoDgiSucursalse toma del historial vigente de la sucursal segúnidDoc.fechaEmision; si no hay historial aplicable, usaSucursal.CodigoCasaDgiy luegoEmpresa.CodigoCasaDgiPorDefecto.
Compatibilidad:
- Integraciones existentes que ya envían
cfe.totalesno cambian comportamiento. - Integraciones nuevas pueden enviar solo
idDoc + detalles(más los nodos que correspondan) y omitirtotales. - Integraciones nuevas también pueden omitir
emisorcuandoidEmpresaycodComercioestán informados correctamente.
Endpoint
- Metodo:
POST - Path:
/api/v1/comprobante/emitir
Headers
- Authorization: Bearer
- Content-Type: application/json
Parámetros principales
idEmpresa
Identificador único de la empresa en el sistema. Corresponde al ID interno de la empresa que está emitiendo el comprobante.
Cómo obtenerlo:
- Via API:
GET /api/v1/usuario/empresas- devuelve lista de empresas del usuario actual - Via API:
GET /api/v1/usuario/{idUsuario}/empresas- devuelve empresas de un usuario específico
codComercio
Código que identifica al comercio (sucursal) dentro de la empresa. Es parte de la identificación fiscal ante DGI.
Cómo obtenerlo:
- Via API:
GET /api/v1/sucursal/todas- devuelve lista de sucursales con sus códigos
codTerminal
Código que identifica la terminal/caja dentro de una sucursal. Combinado con codComercio, identifica unívocamente el punto de emisión.
Cómo obtenerlo:
- Via API:
GET /api/v1/puntoemision/todos- devuelve todos los puntos de emisión - Via API:
GET /api/v1/puntoemision/sucursal/{idSucursal}- devuelve terminales de una sucursal específica
Relación entre codComercio y codTerminal
La combinación codComercio + codTerminal identifica unívocamente:
- Sucursal: Determinada por el
codComercio - Caja/Punto de emisión: Determinada por el
codTerminaldentro de esa sucursal
Esta estructura permite que una empresa tenga múltiples sucursales (cada una con su codComercio) y cada sucursal tenga múltiples cajas/terminales (cada una con su codTerminal).
cfe.emisor (opcional)
Puede omitirse cfe.emisor. En ese caso el backend genera el nodo Emisor automáticamente:
- RUT y razón social desde
Empresa. - Teléfono, email, domicilio, ciudad y departamento priorizando
Sucursal(resuelta porcodComercio) y con fallback aEmpresa. - Código DGI de sucursal según historial (
SucursalCodigoDgiHistorial) para lafechaEmisiondel comprobante.
Recomendación:
- Si querés que se use la configuración correcta de sucursal en el emisor automático, enviá siempre
codComercioeidDoc.fechaEmision.
cfe.totales (opcional)
Puede omitirse el objeto totales si se envían líneas en cfe.detalles.
Ejemplo mínimo (sin totales):
{
"idEmpresa": 123,
"codComercio": "001",
"codTerminal": "T1",
"cfe": {
"idDoc": {
"tipoCfe": 101,
"fechaEmision": "2026-02-17",
"formaPago": 1
},
"detalles": [
{
"numeroLineaDetalle": 1,
"indicadorFacturacion": 3,
"nombreItem": "Producto A",
"cantidad": 1,
"unidadMedida": "N/A",
"precioUnitario": 122,
"montoItem": 122
}
]
}
}
Trazabilidad en detalles (opcional)
Para productos con trazabilidad configurada (lote, serie o ambos), cada línea de detalles puede incluir el objeto datosTrazabilidad.
datosTrazabilidad
Objeto con la selección de trazabilidad para la línea. Campos opcionales según el tipo:
id_lote: ID del lote (cuando el producto controla por lote).id_serie: ID de la serie (cuando el producto controla por serie).
Notas:
- Si el producto requiere trazabilidad y no se envía
datosTrazabilidad, la emisión puede fallar por validación en el front. - Para tipo
LoteYSeriedeben enviarse ambos campos.
Guías prácticas
Para ejemplos completos de cómo usar este endpoint, consulta las siguientes guías: