API REST para emitir, consultar e invalidar Documentos Tributarios Electrónicos (DTE) ante el Ministerio de Hacienda de El Salvador. Certificada al 100% con 11 tipos de DTE certificados (13 categorías MH).
Esta guia cubre los endpoints principales por categoria. Para la referencia completa de los 251+ endpoints con schemas y ejemplos, visite el Swagger interactivo.
| Categoria | Endpoints | Descripcion |
|---|---|---|
| Emision DTE | 8 | Emitir, preview, batch, invalidar, consultar |
| Identidad Fiscal (FSV1) | 6 | Estandar abierto de QR fiscal |
| QR Receptor | 3 | Generar y decodificar QR |
| Catalogos | 6 | Productos, receptores, actividades |
| Smart Import | 3 | Importacion inteligente con auto-correccion |
| Migracion OCR+AI | 2 | Digitalizar facturas fisicas |
| Email y WhatsApp | 8 | Entrega personalizada de DTEs |
| Reportes Fiscales | 7 | F-07, libros IVA, resumen |
| Contabilidad | 4 | Partidas automaticas, balance |
| CxC / CxP | 10 | Cuentas por cobrar y pagar |
| DTEs Recibidos | 6 | Bandeja de compras |
| Inventario | 3 | Control de existencias |
| Contingencia | 4 | Cola offline + reintentos |
| Creditos | 3 | Balance, historial, compra |
| Webhooks | 3 | Eventos configurables |
| Multi-tenencia | 3 | Orgs, switch, miembros |
| Panel Contador | 3 | Dashboard multi-empresa |
| Reconciliacion | 3 | Comparar ventas vs DTEs |
| Legal | 3 | Aceptacion con audit trail |
| Notificaciones | 4 | Avisos internos |
| API Keys | 3 | Crear, rotar, revocar |
| Total | 177+ | — |
https://factura-sv-api-production.up.railway.app/api/v1Authorization: Bearer <jwt> — para usuarios del dashboard (vía Supabase Auth)X-API-Key: fsv_live_xxxx — para integraciones programáticasPruebe su integración sin costo en el ambiente de pruebas del Ministerio de Hacienda (apitest.dtes.mh.gob.sv). Los DTEs emitidos en ambiente "00" (pruebas) no consumen créditos y no tienen validez fiscal. Para activar el sandbox, configure el ambiente en Dashboard → Configuración → Ambiente.
curl -X POST https://factura-sv-api-production.up.railway.app/api/v1/dte/emit \
-H "X-API-Key: fsv_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"tipo_dte": "01",
"condicion_operacion": 1,
"receptor": {
"nombre": "Juan Pérez",
"tipoDocumento": "13",
"numDocumento": "012345678"
},
"items": [{
"descripcion": "Servicio de consultoría",
"cantidad": 1,
"precioUni": 113.00,
"uniMedida": 59
}]
}'| Código | Nombre | Regla IVA | Estado |
|---|---|---|---|
| 01 | Factura (Consumidor Final) | precioUni INCLUYE 13% IVA | ✅ |
| 03 | Comprobante de Crédito Fiscal (CCF) | precioUni EXCLUYE IVA (se suma) | ✅ |
| 04 | Nota de Remisión | Sin valor fiscal | ✅ |
| 05 | Nota de Crédito | Requiere documentoRelacionado | ✅ |
| 06 | Nota de Débito | Requiere documentoRelacionado | ✅ |
| 07 | Comprobante de Retención | IVA retenido 1% | ✅ |
| 08 | Comprobante de Liquidación | Liquidación contable | ✅ |
| 09 | Factura de Exportación | Exento (tipo operación 2) | ✅ |
| 11 | Factura de Sujeto Excluido | Sin IVA | ✅ |
| 14 | Factura de Donación | Exento | ✅ |
| 15 | Comprobante de Donación | — | 🔜 |
⚠️ Regla IVA crítica: Para Factura (01), el precioUni ya incluye el 13% de IVA. Para CCF (03), el precioUni es el precio neto sin IVA — el sistema suma el 13% automáticamente. Enviar precios con la regla incorrecta causa rechazo del Ministerio de Hacienda.
| Contexto | Límite | Código si excede |
|---|---|---|
| Por organización | 60 req/min | 429 |
| Por IP (endpoints públicos) | 30 req/min | 429 |
| Batch máximo | 100 DTEs/call | 400 |
| Archivo import | 10 MB | 413 |
Para usuarios del dashboard, la autenticación se maneja vía Supabase Auth (JWT ES256, access token de 1 hora con refresh automático). Para integraciones programáticas, use API Keys con el header X-API-Key.
/api/v1/keysBearer (admin)Crear nueva API key con permisos específicos.
{
"name": "ERP Integration",
"permissions": ["emit", "list", "export", "invalidate"]
}{
"api_key": "fsv_live_abc123...",
"key_prefix": "fsv_live_abc1****",
"permissions": ["emit", "list", "export", "invalidate"]
}⚠️ La API key completa solo se muestra una vez. Guárdela de forma segura.
/api/v1/keysBearer (admin)Listar API keys activas (nunca muestra la clave completa).
[
{
"id": "uuid",
"key_prefix": "fsv_live_abc1****",
"name": "ERP Integration",
"permissions": ["emit", "list"],
"is_active": true,
"created_at": "2026-02-23T..."
}
]/api/v1/keys/{key_id}Bearer (admin)Revocar API key permanentemente.
/api/v1/dte/emitBearer / X-API-KeyEmitir un DTE. Firma con RSA-SHA256, transmite al MH y retorna sello de recepción. ~1.5s end-to-end.
{
"tipo_dte": "01",
"condicion_operacion": 1,
"receptor": {
"nombre": "Juan Pérez",
"tipoDocumento": "13",
"numDocumento": "012345678",
"correo": "juan@email.com"
},
"items": [
{
"descripcion": "Servicio de consultoría",
"cantidad": 1,
"precioUni": 113.00,
"uniMedida": 59
}
]
}{
"success": true,
"estado": "PROCESADO",
"selloRecibido": "2026022...",
"codigoGeneracion": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"numeroControl": "DTE-01-M001P001-000000000000001",
"dte_id": "uuid"
}Auto-completado: el sistema auto-asigna numeroControl (secuencia atómica), codigoGeneracion (UUID), fecha/hora, cálculo IVA según tipo DTE, firma digital, transmisión, PDF y email al receptor. Solo necesita enviar receptor + items.
/api/v1/dte/previewBearer / X-API-KeyVista previa del DTE sin transmitir al MH. Útil para validación antes de emisión definitiva.
/api/v1/dte/batch/emitBearer / X-API-KeyEmitir hasta 100 DTEs en una sola llamada. Cada DTE se procesa individualmente con su propio estado.
{
"dtes": [
{
"tipo_dte": "01",
"receptor": { "nombre": "Cliente 1", "tipoDocumento": "13", "numDocumento": "012345678" },
"items": [{ "descripcion": "Producto A", "cantidad": 2, "precioUni": 56.50, "uniMedida": 59 }]
},
{
"tipo_dte": "03",
"receptor": { "nombre": "Empresa X", "tipoDocumento": "36", "numDocumento": "0614-010180-103-0", "nrc": "12345-6" },
"items": [{ "descripcion": "Servicio B", "cantidad": 1, "precioUni": 500.00, "uniMedida": 59 }]
}
]
}{
"total": 2,
"procesados": 2,
"fallidos": 0,
"resultados": [
{ "index": 0, "estado": "PROCESADO", "selloRecibido": "...", "codigoGeneracion": "..." },
{ "index": 1, "estado": "PROCESADO", "selloRecibido": "...", "codigoGeneracion": "..." }
]
}/api/v1/dte/listBearer / X-API-KeyListar DTEs con filtros opcionales: tipo, estado, fecha, receptor, paginación.
?tipo_dte=01 # Filtrar por tipo
&estado=PROCESADO # PROCESADO | RECHAZADO | ANULADO
&fecha_desde=2026-01-01
&fecha_hasta=2026-12-31
&receptor=Juan # Búsqueda por nombre
&page=1&per_page=50[
{
"id": "uuid",
"tipo_dte": "01",
"numero_control": "DTE-01-M001P001-000000000000001",
"estado": "PROCESADO",
"monto_total": 113.00,
"fecha_emision": "2026-02-23",
"receptor_nombre": "Juan Pérez"
}
]/api/v1/dte/{dte_id}Bearer / X-API-KeyDetalle completo de un DTE: JSON del documento, JWS firmado, sello del MH.
/api/v1/dte/{dte_id}/pdfBearer / X-API-KeyDescargar PDF del DTE con código QR de verificación del MH embebido. Retorna application/pdf.
/api/v1/dte/exportBearer / X-API-KeyExportar historial de DTEs en formato XLSX o PDF con filtros.
/api/v1/dte/invalidateBearer / X-API-KeyInvalidar un DTE previamente procesado. Firma la anulación y la transmite al MH. Ventana: 90 días calendario.
{
"codigo_generacion": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"tipo_dte": "01",
"motivo_anulacion": 2,
"nombre_solicita": "Juan Pérez",
"tipo_doc_solicita": "36",
"num_doc_solicita": "00000000-0",
"nombre_responsable": "María García",
"tipo_doc_responsable": "36",
"num_doc_responsable": "00000000-0"
}{
"success": true,
"selloRecibido": "...",
"estado": "ANULADO"
}/api/v1/reports/libro-ventas-contribuyenteBearer / X-API-KeyLibro de Ventas Contribuyente (CCF tipo 03). Parámetros: year, month, format (xlsx|pdf).
/api/v1/reports/libro-ventas-consumidorBearer / X-API-KeyLibro de Ventas Consumidor Final (Factura tipo 01). Parámetros: year, month, format (xlsx|pdf).
/api/v1/reports/resumen-ivaBearer / X-API-KeyResumen IVA mensual consolidado por tipo de DTE. Parámetros: year, month, format (xlsx|pdf).
Anexos CSV listos para subir a la DGII.
/api/v1/reports/f07/anexo1Bearer / X-API-KeyAnexo 1: CCF + Notas de Crédito + Notas de Débito (CSV).
/api/v1/reports/f07/anexo2Bearer / X-API-KeyAnexo 2: Facturas + Sujeto Excluido (CSV).
/api/v1/reports/f07/anexo3Bearer / X-API-KeyAnexo 3: Retenciones tipo 07 (CSV).
/api/v1/reports/f07/descargarBearer / X-API-KeyZIP consolidado con los 3 anexos listos para declaración.
Cuando el Ministerio de Hacienda no está disponible (timeout, 502, 503), los DTEs entran automáticamente a la cola de contingencia. El sistema reintenta cada 15 minutos. También puede procesarlos manualmente.
/api/v1/contingencyBearer / X-API-KeyListar DTEs en cola de contingencia.
/api/v1/contingency/processBearer (admin)Procesar y retransmitir DTEs encolados.
{
"processed": 3,
"failed": 1,
"remaining": 0
}/api/v1/productosBearer / X-API-KeyListar productos del catálogo de la organización.
/api/v1/productosBearerCrear producto.
{
"codigo": "SRV001",
"descripcion": "Servicio de consultoría",
"precio": 100.00,
"uniMedida": 59
}/api/v1/receptoresBearer / X-API-KeyListar receptores frecuentes con búsqueda. Parámetro: q (búsqueda por nombre/NIT).
/api/v1/receptoresBearerCrear receptor frecuente.
/catalogo/actividadesPúblicoBuscar actividades económicas del MH (989 códigos CAT-019). Parámetro: q (búsqueda), limit.
FACTURA-SV usa un modelo de créditos prepagados. Cada DTE transmitido exitosamente en producción consume 1 crédito. Los créditos nunca vencen.
/api/v1/credits/balanceBearer / X-API-KeyConsultar balance actual de créditos de la organización.
{
"credit_balance": 847,
"alert_level": null
}/api/v1/credits/historyBearer / X-API-KeyHistorial de transacciones de créditos (compras, consumos, ajustes).
Reciba notificaciones en tiempo real cuando ocurren eventos en su organización. Los webhooks incluyen firma HMAC-SHA256 en el header X-Webhook-Signature para verificación. Se desactivan automáticamente tras 10 fallos consecutivos.
/api/v1/webhooksBearer (admin)Registrar un webhook.
{
"url": "https://mi-erp.com/webhook/factura-sv",
"events": ["dte.emitted", "dte.invalidated"],
"secret": "mi_secreto_hmac"
}/api/v1/webhooksBearer (admin)Listar webhooks registrados.
/api/v1/webhooks/{webhook_id}Bearer (admin)Eliminar webhook.
Suba archivos CSV o XLSX de cualquier sistema y FACTURA-SV detecta automáticamente las columnas, normaliza los datos al formato del MH, y genera DTEs listos para emitir.
/api/v1/smart-import/analyzeBearerUpload archivo CSV/XLSX. Analiza estructura y retorna mapeo de columnas detectado para confirmación.
Content-Type: multipart/form-data
file: archivo.xlsx/api/v1/smart-import/executeBearerEjecutar import con mapeo confirmado. Crea receptores y/o productos en catálogo.
/api/v1/smart-import/one-stepBearerImport automático sin confirmación (usa mapeo por defecto).
/api/v1/orgsBearerListar organizaciones del usuario actual y obtener la organización activa.
/api/v1/orgs/switchBearerCambiar de organización activa (multi-empresa).
Estandar abierto de identificacion fiscal. Cualquier software puede generar y leer QR fiscales compatibles. Especificacion completa en factura-sv.algoritmos.io/fiscal-standard.
/api/v1/fiscal-id/specPublicoEspecificacion completa del estandar FSV1 (sin auth).
/api/v1/fiscal-id/generatePublicoGenerar Tarjeta Fiscal Digital con QR.
/api/v1/fiscal-id/decodePublicoDecodificar QR fiscal FSV1 o legacy.
/api/v1/fiscal-id/lookupPublicoBuscar identidad por NIT en directorio. Parametro: nit.
/api/v1/fiscal-id/resolve-for-dteBearer / X-API-KeyResolver receptor para emision DTE a partir de QR o NIT.
Genere y escanee codigos QR con datos fiscales del receptor para autocompletar formularios en 1 segundo.
/api/v1/receptores/qr/generateBearerGenerar QR para un receptor registrado.
/api/v1/receptores/qr/decodeBearerDecodificar QR escaneado y retornar datos del receptor.
/api/v1/receptores/qr/generate-publicPublicoGenerar QR sin cuenta (uso publico).
Configure como se envian las facturas al receptor. Use el correo de la plataforma o su propio servidor SMTP. Configure WhatsApp Business por organizacion.
/api/v1/config/emailBearerLeer configuracion email de la organizacion.
/api/v1/config/emailBearerGuardar SMTP custom (password encriptado AES-256).
/api/v1/config/email/testBearerEnviar email de prueba para verificar configuracion.
/api/v1/config/emailBearerVolver a correo de plataforma por defecto.
/api/v1/whatsapp/configBearerLeer configuracion WhatsApp de la organizacion.
/api/v1/whatsapp/configBearerGuardar token y phone ID de WhatsApp Business.
/api/v1/whatsapp/testBearerEnviar mensaje de prueba.
/api/v1/dte/{dte_id}/whatsappBearerEnviar DTE especifico por WhatsApp al receptor.
Gestion automatica de cuentas por cobrar y pagar derivadas de DTEs emitidos y recibidos.
/api/v1/cxcBearerListar cuentas por cobrar.
/api/v1/cxc/statsBearerEstadisticas de cobro.
/api/v1/cxc/agingBearerAntiguedad de saldos.
/api/v1/cxc/{dte_id}/pagoBearerRegistrar pago recibido.
/api/v1/cxpBearerListar cuentas por pagar.
/api/v1/cxp/{cxp_id}/pagoBearerRegistrar pago realizado.
Reciba, organice y contabilice los DTEs que otros emisores le envian.
/api/v1/dte-recibidosBearerListar DTEs recibidos.
/api/v1/dte-recibidos/uploadBearerSubir JSON de DTE recibido.
/api/v1/dte-recibidos/libro-comprasBearerGenerar libro de compras.
/api/v1/dte-recibidos/cuadre-ivaBearerCuadre IVA (debito fiscal vs credito fiscal).
/api/v1/dte-recibidos/resumenBearerResumen mensual de DTEs recibidos.
Partidas contables generadas automaticamente desde DTEs emitidos.
/api/v1/contabilidad/cuentasBearerPlan de cuentas de la organizacion.
/api/v1/contabilidad/partidasBearerListar partidas contables generadas.
/api/v1/contabilidad/balanceBearerBalance de comprobacion.
/api/v1/contabilidad/cuentas/seedBearerInicializar plan de cuentas estandar.
Control de existencias vinculado a emision de DTEs.
/api/v1/inventoryBearerListar inventario de la organizacion.
/api/v1/inventory/{producto_id}/movementBearerRegistrar movimiento de inventario.
/api/v1/inventory/{producto_id}/kardexBearerKardex del producto (historial de movimientos).
Extraiga datos de facturas fisicas (PDF, JSON, XML) usando OCR y AI. Pipeline: PDF digital (pdfplumber) → PDF escaneado (Tesseract OCR) → AI fallback (DeepSeek) → CSV 16 columnas.
/api/v1/import/facturas-fisicasBearerUpload archivos (PDF, JSON, XML) y recibir CSV estructurado de salida.
/api/v1/import/facturas-fisicas/previewBearerVista previa antes de exportar — verificar datos extraidos.
Endpoints especificos para despachos contables que administran multiples empresas.
/api/v1/contador/dashboardBearerDashboard consolidado del despacho con metricas de todas las empresas.
/api/v1/contador/add-clientBearerAgregar empresa cliente al despacho.
/api/v1/contador/reportBearerReporte consolidado multi-empresa.
Compare ventas de su POS/ERP contra DTEs emitidos para detectar discrepancias.
/api/v1/reconciliacion/uploadBearerSubir CSV de ventas para comparar contra DTEs emitidos.
/api/v1/reconciliacionBearerListar reconciliaciones.
/api/v1/reconciliacion/{recon_id}BearerDetalle de reconciliacion con discrepancias encontradas.
Registro de aceptacion de documentos legales con audit trail completo y verificacion SHA-256.
/api/v1/legal/acceptBearerRegistrar aceptacion de documento legal.
/api/v1/legal/statusBearerEstado de documentos legales aceptados.
/api/v1/legal/verify/{hash}PublicoVerificacion publica por hash SHA-256 (para auditores).
Sistema de notificaciones internas del dashboard.
/api/v1/notificationsBearerListar notificaciones del usuario.
/api/v1/notifications/unread-countBearerConteo de notificaciones no leidas.
/api/v1/notifications/read-allBearerMarcar todas las notificaciones como leidas.
| Código | Descripción | Acción recomendada |
|---|---|---|
400 | Datos inválidos o campos requeridos faltantes | Verificar payload y tipos de dato |
401 | Token JWT inválido o API Key no reconocida | Renovar token o verificar API key |
403 | Sin permisos o créditos insuficientes | Verificar rol/permisos o recargar créditos |
404 | Recurso no encontrado | Verificar ID o endpoint |
409 | DTE ya fue procesado o correlativo duplicado | No reintentar — consultar estado del DTE |
422 | Error de validación del esquema DTE por el MH | Revisar campos según tipo de DTE |
429 | Rate limit excedido | Esperar 60 segundos y reintentar |
500 | Error interno del servidor | Reportar a soporte con el request ID |
502 | Ministerio de Hacienda no disponible | El DTE entra a cola de contingencia automáticamente |
Soporte directo para integraciones. Respuesta en menos de 24 horas.