Documentación API

v1.0Marzo 2026

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).

Documentacion API — Swagger interactivo disponible en ingles

Esta guia cubre los endpoints principales por categoria. Para la referencia completa de los 251+ endpoints con schemas y ejemplos, visite el Swagger interactivo.

CategoriaEndpointsDescripcion
Emision DTE8Emitir, preview, batch, invalidar, consultar
Identidad Fiscal (FSV1)6Estandar abierto de QR fiscal
QR Receptor3Generar y decodificar QR
Catalogos6Productos, receptores, actividades
Smart Import3Importacion inteligente con auto-correccion
Migracion OCR+AI2Digitalizar facturas fisicas
Email y WhatsApp8Entrega personalizada de DTEs
Reportes Fiscales7F-07, libros IVA, resumen
Contabilidad4Partidas automaticas, balance
CxC / CxP10Cuentas por cobrar y pagar
DTEs Recibidos6Bandeja de compras
Inventario3Control de existencias
Contingencia4Cola offline + reintentos
Creditos3Balance, historial, compra
Webhooks3Eventos configurables
Multi-tenencia3Orgs, switch, miembros
Panel Contador3Dashboard multi-empresa
Reconciliacion3Comparar ventas vs DTEs
Legal3Aceptacion con audit trail
Notificaciones4Avisos internos
API Keys3Crear, rotar, revocar
Total177+

Base URL

https://factura-sv-api-production.up.railway.app/api/v1

Autenticación

JWTAuthorization: Bearer <jwt> — para usuarios del dashboard (vía Supabase Auth)
API KeyX-API-Key: fsv_live_xxxx — para integraciones programáticas
🧪

Sandbox gratuito e ilimitado

Pruebe 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.

Ejemplo rápido — Emitir factura

curl
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
    }]
  }'

Tipos de DTE Soportados

CódigoNombreRegla IVAEstado
01Factura (Consumidor Final)precioUni INCLUYE 13% IVA
03Comprobante de Crédito Fiscal (CCF)precioUni EXCLUYE IVA (se suma)
04Nota de RemisiónSin valor fiscal
05Nota de CréditoRequiere documentoRelacionado
06Nota de DébitoRequiere documentoRelacionado
07Comprobante de RetenciónIVA retenido 1%
08Comprobante de LiquidaciónLiquidación contable
09Factura de ExportaciónExento (tipo operación 2)
11Factura de Sujeto ExcluidoSin IVA
14Factura de DonaciónExento
15Comprobante 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.

Rate Limits

ContextoLímiteCódigo si excede
Por organización60 req/min429
Por IP (endpoints públicos)30 req/min429
Batch máximo100 DTEs/call400
Archivo import10 MB413

Autenticación

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.

POST/api/v1/keysBearer (admin)

Crear nueva API key con permisos específicos.

Request Body
{
  "name": "ERP Integration",
  "permissions": ["emit", "list", "export", "invalidate"]
}
Response 201
{
  "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.

GET/api/v1/keysBearer (admin)

Listar API keys activas (nunca muestra la clave completa).

Response 200
[
  {
    "id": "uuid",
    "key_prefix": "fsv_live_abc1****",
    "name": "ERP Integration",
    "permissions": ["emit", "list"],
    "is_active": true,
    "created_at": "2026-02-23T..."
  }
]
DELETE/api/v1/keys/{key_id}Bearer (admin)

Revocar API key permanentemente.

Emisión de DTEs

POST/api/v1/dte/emitBearer / X-API-Key

Emitir un DTE. Firma con RSA-SHA256, transmite al MH y retorna sello de recepción. ~1.5s end-to-end.

Request Body — Factura (01)
{
  "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
    }
  ]
}
Response 200
{
  "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.

POST/api/v1/dte/previewBearer / X-API-Key

Vista previa del DTE sin transmitir al MH. Útil para validación antes de emisión definitiva.

Emisión por Lote (Batch)

POST/api/v1/dte/batch/emitBearer / X-API-Key

Emitir hasta 100 DTEs en una sola llamada. Cada DTE se procesa individualmente con su propio estado.

Request Body
{
  "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 }]
    }
  ]
}
Response 200
{
  "total": 2,
  "procesados": 2,
  "fallidos": 0,
  "resultados": [
    { "index": 0, "estado": "PROCESADO", "selloRecibido": "...", "codigoGeneracion": "..." },
    { "index": 1, "estado": "PROCESADO", "selloRecibido": "...", "codigoGeneracion": "..." }
  ]
}

Consulta de DTEs

GET/api/v1/dte/listBearer / X-API-Key

Listar DTEs con filtros opcionales: tipo, estado, fecha, receptor, paginación.

Parámetros de query
?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
Response 200
[
  {
    "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"
  }
]
GET/api/v1/dte/{dte_id}Bearer / X-API-Key

Detalle completo de un DTE: JSON del documento, JWS firmado, sello del MH.

GET/api/v1/dte/{dte_id}/pdfBearer / X-API-Key

Descargar PDF del DTE con código QR de verificación del MH embebido. Retorna application/pdf.

GET/api/v1/dte/exportBearer / X-API-Key

Exportar historial de DTEs en formato XLSX o PDF con filtros.

Invalidación

POST/api/v1/dte/invalidateBearer / X-API-Key

Invalidar un DTE previamente procesado. Firma la anulación y la transmite al MH. Ventana: 90 días calendario.

Request Body
{
  "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"
}
Response 200
{
  "success": true,
  "selloRecibido": "...",
  "estado": "ANULADO"
}

Reportes Fiscales

GET/api/v1/reports/libro-ventas-contribuyenteBearer / X-API-Key

Libro de Ventas Contribuyente (CCF tipo 03). Parámetros: year, month, format (xlsx|pdf).

GET/api/v1/reports/libro-ventas-consumidorBearer / X-API-Key

Libro de Ventas Consumidor Final (Factura tipo 01). Parámetros: year, month, format (xlsx|pdf).

GET/api/v1/reports/resumen-ivaBearer / X-API-Key

Resumen IVA mensual consolidado por tipo de DTE. Parámetros: year, month, format (xlsx|pdf).

Declaración F-07

Anexos CSV listos para subir a la DGII.

GET/api/v1/reports/f07/anexo1Bearer / X-API-Key

Anexo 1: CCF + Notas de Crédito + Notas de Débito (CSV).

GET/api/v1/reports/f07/anexo2Bearer / X-API-Key

Anexo 2: Facturas + Sujeto Excluido (CSV).

GET/api/v1/reports/f07/anexo3Bearer / X-API-Key

Anexo 3: Retenciones tipo 07 (CSV).

GET/api/v1/reports/f07/descargarBearer / X-API-Key

ZIP consolidado con los 3 anexos listos para declaración.

Contingencia

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.

GET/api/v1/contingencyBearer / X-API-Key

Listar DTEs en cola de contingencia.

POST/api/v1/contingency/processBearer (admin)

Procesar y retransmitir DTEs encolados.

Response 200
{
  "processed": 3,
  "failed": 1,
  "remaining": 0
}

Catálogos

Productos

GET/api/v1/productosBearer / X-API-Key

Listar productos del catálogo de la organización.

POST/api/v1/productosBearer

Crear producto.

Request Body
{
  "codigo": "SRV001",
  "descripcion": "Servicio de consultoría",
  "precio": 100.00,
  "uniMedida": 59
}

Receptores

GET/api/v1/receptoresBearer / X-API-Key

Listar receptores frecuentes con búsqueda. Parámetro: q (búsqueda por nombre/NIT).

POST/api/v1/receptoresBearer

Crear receptor frecuente.

Actividades Económicas

GET/catalogo/actividadesPúblico

Buscar actividades económicas del MH (989 códigos CAT-019). Parámetro: q (búsqueda), limit.

Créditos

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.

GET/api/v1/credits/balanceBearer / X-API-Key

Consultar balance actual de créditos de la organización.

Response 200
{
  "credit_balance": 847,
  "alert_level": null
}
GET/api/v1/credits/historyBearer / X-API-Key

Historial de transacciones de créditos (compras, consumos, ajustes).

Webhooks Salientes

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.

Eventos disponibles:

dte.emitteddte.invalidateddte.rejectedpayment.received
POST/api/v1/webhooksBearer (admin)

Registrar un webhook.

Request Body
{
  "url": "https://mi-erp.com/webhook/factura-sv",
  "events": ["dte.emitted", "dte.invalidated"],
  "secret": "mi_secreto_hmac"
}
GET/api/v1/webhooksBearer (admin)

Listar webhooks registrados.

DELETE/api/v1/webhooks/{webhook_id}Bearer (admin)

Eliminar webhook.

Smart Import

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.

POST/api/v1/smart-import/analyzeBearer

Upload archivo CSV/XLSX. Analiza estructura y retorna mapeo de columnas detectado para confirmación.

Request
Content-Type: multipart/form-data
file: archivo.xlsx
POST/api/v1/smart-import/executeBearer

Ejecutar import con mapeo confirmado. Crea receptores y/o productos en catálogo.

POST/api/v1/smart-import/one-stepBearer

Import automático sin confirmación (usa mapeo por defecto).

Organizaciones

GET/api/v1/orgsBearer

Listar organizaciones del usuario actual y obtener la organización activa.

POST/api/v1/orgs/switchBearer

Cambiar de organización activa (multi-empresa).

Identidad Fiscal Digital (Estandar FSV1)

Estandar abierto de identificacion fiscal. Cualquier software puede generar y leer QR fiscales compatibles. Especificacion completa en factura-sv.algoritmos.io/fiscal-standard.

GET/api/v1/fiscal-id/specPublico

Especificacion completa del estandar FSV1 (sin auth).

POST/api/v1/fiscal-id/generatePublico

Generar Tarjeta Fiscal Digital con QR.

POST/api/v1/fiscal-id/decodePublico

Decodificar QR fiscal FSV1 o legacy.

GET/api/v1/fiscal-id/lookupPublico

Buscar identidad por NIT en directorio. Parametro: nit.

POST/api/v1/fiscal-id/resolve-for-dteBearer / X-API-Key

Resolver receptor para emision DTE a partir de QR o NIT.

QR de Receptor

Genere y escanee codigos QR con datos fiscales del receptor para autocompletar formularios en 1 segundo.

POST/api/v1/receptores/qr/generateBearer

Generar QR para un receptor registrado.

POST/api/v1/receptores/qr/decodeBearer

Decodificar QR escaneado y retornar datos del receptor.

POST/api/v1/receptores/qr/generate-publicPublico

Generar QR sin cuenta (uso publico).

Entrega de DTEs (Email + WhatsApp)

Configure como se envian las facturas al receptor. Use el correo de la plataforma o su propio servidor SMTP. Configure WhatsApp Business por organizacion.

Email (SMTP propio)

GET/api/v1/config/emailBearer

Leer configuracion email de la organizacion.

PUT/api/v1/config/emailBearer

Guardar SMTP custom (password encriptado AES-256).

POST/api/v1/config/email/testBearer

Enviar email de prueba para verificar configuracion.

DELETE/api/v1/config/emailBearer

Volver a correo de plataforma por defecto.

WhatsApp

GET/api/v1/whatsapp/configBearer

Leer configuracion WhatsApp de la organizacion.

POST/api/v1/whatsapp/configBearer

Guardar token y phone ID de WhatsApp Business.

POST/api/v1/whatsapp/testBearer

Enviar mensaje de prueba.

POST/api/v1/dte/{dte_id}/whatsappBearer

Enviar DTE especifico por WhatsApp al receptor.

Cuentas por Cobrar (CxC) y Cuentas por Pagar (CxP)

Gestion automatica de cuentas por cobrar y pagar derivadas de DTEs emitidos y recibidos.

Cuentas por Cobrar

GET/api/v1/cxcBearer

Listar cuentas por cobrar.

GET/api/v1/cxc/statsBearer

Estadisticas de cobro.

GET/api/v1/cxc/agingBearer

Antiguedad de saldos.

POST/api/v1/cxc/{dte_id}/pagoBearer

Registrar pago recibido.

Cuentas por Pagar

GET/api/v1/cxpBearer

Listar cuentas por pagar.

POST/api/v1/cxp/{cxp_id}/pagoBearer

Registrar pago realizado.

DTEs Recibidos (Bandeja de Compras)

Reciba, organice y contabilice los DTEs que otros emisores le envian.

GET/api/v1/dte-recibidosBearer

Listar DTEs recibidos.

POST/api/v1/dte-recibidos/uploadBearer

Subir JSON de DTE recibido.

GET/api/v1/dte-recibidos/libro-comprasBearer

Generar libro de compras.

GET/api/v1/dte-recibidos/cuadre-ivaBearer

Cuadre IVA (debito fiscal vs credito fiscal).

GET/api/v1/dte-recibidos/resumenBearer

Resumen mensual de DTEs recibidos.

Contabilidad Automatica

Partidas contables generadas automaticamente desde DTEs emitidos.

GET/api/v1/contabilidad/cuentasBearer

Plan de cuentas de la organizacion.

GET/api/v1/contabilidad/partidasBearer

Listar partidas contables generadas.

GET/api/v1/contabilidad/balanceBearer

Balance de comprobacion.

POST/api/v1/contabilidad/cuentas/seedBearer

Inicializar plan de cuentas estandar.

Inventario

Control de existencias vinculado a emision de DTEs.

GET/api/v1/inventoryBearer

Listar inventario de la organizacion.

POST/api/v1/inventory/{producto_id}/movementBearer

Registrar movimiento de inventario.

GET/api/v1/inventory/{producto_id}/kardexBearer

Kardex del producto (historial de movimientos).

Migracion Digital (OCR + Inteligencia Artificial)

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.

POST/api/v1/import/facturas-fisicasBearer

Upload archivos (PDF, JSON, XML) y recibir CSV estructurado de salida.

POST/api/v1/import/facturas-fisicas/previewBearer

Vista previa antes de exportar — verificar datos extraidos.

Panel Contador (Multi-empresa)

Endpoints especificos para despachos contables que administran multiples empresas.

GET/api/v1/contador/dashboardBearer

Dashboard consolidado del despacho con metricas de todas las empresas.

POST/api/v1/contador/add-clientBearer

Agregar empresa cliente al despacho.

GET/api/v1/contador/reportBearer

Reporte consolidado multi-empresa.

Reconciliacion Fiscal

Compare ventas de su POS/ERP contra DTEs emitidos para detectar discrepancias.

POST/api/v1/reconciliacion/uploadBearer

Subir CSV de ventas para comparar contra DTEs emitidos.

GET/api/v1/reconciliacionBearer

Listar reconciliaciones.

GET/api/v1/reconciliacion/{recon_id}Bearer

Detalle de reconciliacion con discrepancias encontradas.

Registro de aceptacion de documentos legales con audit trail completo y verificacion SHA-256.

POST/api/v1/legal/acceptBearer

Registrar aceptacion de documento legal.

GET/api/v1/legal/statusBearer

Estado de documentos legales aceptados.

GET/api/v1/legal/verify/{hash}Publico

Verificacion publica por hash SHA-256 (para auditores).

Notificaciones

Sistema de notificaciones internas del dashboard.

GET/api/v1/notificationsBearer

Listar notificaciones del usuario.

GET/api/v1/notifications/unread-countBearer

Conteo de notificaciones no leidas.

POST/api/v1/notifications/read-allBearer

Marcar todas las notificaciones como leidas.

Códigos de Error

CódigoDescripciónAcción recomendada
400Datos inválidos o campos requeridos faltantesVerificar payload y tipos de dato
401Token JWT inválido o API Key no reconocidaRenovar token o verificar API key
403Sin permisos o créditos insuficientesVerificar rol/permisos o recargar créditos
404Recurso no encontradoVerificar ID o endpoint
409DTE ya fue procesado o correlativo duplicadoNo reintentar — consultar estado del DTE
422Error de validación del esquema DTE por el MHRevisar campos según tipo de DTE
429Rate limit excedidoEsperar 60 segundos y reintentar
500Error interno del servidorReportar a soporte con el request ID
502Ministerio de Hacienda no disponibleEl DTE entra a cola de contingencia automáticamente

¿Necesita ayuda con la integración?

Soporte directo para integraciones. Respuesta en menos de 24 horas.

© 2026 Efficient AI Algorithms — Certificado MH 100%← Volver al inicio