# Open Factura > Facturación electrónica de El Salvador (DTE, Normativa de Cumplimiento 2.0) con API REST, servidor MCP, CLI y SDK de código abierto. Cada página tiene una versión en Markdown en la misma ruta con la extensión `.md`. Servidor MCP remoto: `https://openfactura.co/mcp` (encabezado `Authorization: Bearer of_test_…`). Todo el contenido en un archivo: https://docs.openfactura.co/llms-full.txt ## Empezar - [Introducción](https://docs.openfactura.co/index.md): Open Factura es una plataforma de código abierto para emitir Documentos Tributarios Electrónicos (DTE) de El Salvador desde tu sistema, tu terminal o tu asistente de IA. - [Inicio rápido](https://docs.openfactura.co/inicio-rapido.md): Crea tu cuenta, registra el emisor, genera una clave de pruebas y emite tu primera factura con curl, la CLI o MCP. - [Autenticación y claves](https://docs.openfactura.co/autenticacion.md): Claves de API of_test_ y of_live_, permisos, sesión del panel y cómo se guarda cada secreto. - [Ambientes](https://docs.openfactura.co/ambientes.md): Pruebas (00) y producción (01) del Ministerio de Hacienda, y cómo pasar de uno a otro. ## Guías - [Emitir documentos](https://docs.openfactura.co/guias/emitir.md): Cuerpo de emisión, qué tipo de DTE corresponde a cada operación e IVA en los precios, con ejemplos de cada tipo. - [Idempotencia](https://docs.openfactura.co/guias/idempotencia.md): Reintenta una emisión con la misma Idempotency-Key y nunca emita dos veces el mismo documento. - [Contingencia](https://docs.openfactura.co/guias/contingencia.md): Qué pasa cuando el MH no responde, cómo se transmiten después los documentos y en qué se diferencia de una emisión incierta. - [Invalidación](https://docs.openfactura.co/guias/invalidacion.md): Anular un DTE o un evento procesado, con sus tipos, plazos y el orden correcto cuando existe un retorno. - [Evento de retorno](https://docs.openfactura.co/guias/retorno.md): Devoluciones, reembolsos y envases sobre una Factura, Factura de Exportación o Sujeto Excluido, sin invalidar el documento. - [Operaciones especiales](https://docs.openfactura.co/guias/operaciones-especiales.md): Informar cada periodo las facturas simplificadas y los comprobantes de control interno con el evento 17. - [Webhooks](https://docs.openfactura.co/guias/webhooks.md): Recibe un aviso firmado en tu servidor cuando un documento o evento cambia de estado. - [Límites de peticiones](https://docs.openfactura.co/guias/limites.md): Cuántas peticiones admite cada clave, los encabezados RateLimit y cómo reintentar tras un 429. ## Herramientas - [Conecta tu agente](https://docs.openfactura.co/herramientas/agentes.md): Conecta Claude Code, Claude Desktop, Cursor, VS Code, Windsurf, Codex, Gemini CLI o Zed al servidor MCP de Open Factura. - [Servidor MCP](https://docs.openfactura.co/herramientas/mcp.md): Conecta Claude, Cursor, VS Code, Codex, Gemini o cualquier cliente MCP a Open Factura, de forma remota o local por stdio. - [CLI](https://docs.openfactura.co/herramientas/cli.md): openfactura, la línea de comandos para emitir, consultar e invalidar DTE desde la terminal, scripts e integración continua. - [Habilidades para agentes](https://docs.openfactura.co/herramientas/habilidades.md): Instala las habilidades de Open Factura (skills.sh) para que Claude Code, Cursor, Codex y otros agentes facturen con cuidado. - [SDK @openfactura/dte](https://docs.openfactura.co/herramientas/sdk.md): SDK en TypeScript (MIT) para construir, validar, firmar y transmitir DTE directamente al MH, sin Java ni Docker. ## Hacienda y despliegue - [Ser emisor ante Hacienda](https://docs.openfactura.co/hacienda/ser-emisor.md): El recorrido para emitir DTE con valor legal en El Salvador, de la solicitud de pruebas a la autorización en producción. - [Certificación ante Hacienda](https://docs.openfactura.co/guias/certificacion.md): Emite en un clic las pruebas mínimas que exige el Ministerio de Hacienda para autorizarte como emisor de DTE. - [Autoalojamiento](https://docs.openfactura.co/autoalojamiento.md): Ejecuta la API de Open Factura en tu equipo con el simulador del MH o despliégala en tu propia cuenta de Cloudflare. ## Referencia - [Errores](https://docs.openfactura.co/errores.md): El formato común de errores y qué hacer con cada código. ## Referencia de la API - [API de Open Factura](https://docs.openfactura.co/api.md): Facturación electrónica de El Salvador (DTE, Normativa 2.0). - [Sesión](https://docs.openfactura.co/api/operations/tags/sesión.md): Identidad del actor y tablero. - [Emisor](https://docs.openfactura.co/api/operations/tags/emisor.md): Datos fiscales, establecimientos, puntos de venta y credenciales del MH. - [Clientes](https://docs.openfactura.co/api/operations/tags/clientes.md): Receptores guardados. - [Productos](https://docs.openfactura.co/api/operations/tags/productos.md): Catálogo de productos y servicios (precios sin IVA). - [DTE](https://docs.openfactura.co/api/operations/tags/dte.md): Emisión, consulta, invalidación y contingencia de documentos. - [Eventos](https://docs.openfactura.co/api/operations/tags/eventos.md): Evento de Retorno (18) y Operaciones Especiales (17). - [Catálogos](https://docs.openfactura.co/api/operations/tags/catálogos.md): Catálogos oficiales del MH (CAT-xxx). - [Claves de API](https://docs.openfactura.co/api/operations/tags/claves-de-api.md): Claves `of_test_…` y `of_live_…`. Sólo desde una sesión del panel. - [Webhooks](https://docs.openfactura.co/api/operations/tags/webhooks.md): Notificaciones firmadas (HMAC-SHA256) cuando cambia el estado de un documento o evento. - [Auditoría](https://docs.openfactura.co/api/operations/tags/auditoría.md): Bitácora de acciones de la organización. - [Registros](https://docs.openfactura.co/api/operations/tags/registros.md): Peticiones hechas con claves de API (sólo metadatos; 30 días). - [Documento OpenAPI 3.1 de esta API](https://docs.openfactura.co/api/operations/openapi_obtener.md): GET /openapi.json - [Quién hace la petición](https://docs.openfactura.co/api/operations/yo_obtener.md): GET /yo - [Resumen del tablero](https://docs.openfactura.co/api/operations/resumen_obtener.md): GET /resumen - [Uso por día](https://docs.openfactura.co/api/operations/uso_obtener.md): GET /uso - [Datos del emisor](https://docs.openfactura.co/api/operations/emisor_obtener.md): GET /emisor - [Crear o actualizar el emisor](https://docs.openfactura.co/api/operations/emisor_guardar.md): PUT /emisor - [Guardar credenciales del MH](https://docs.openfactura.co/api/operations/emisor_credenciales_guardar.md): PUT /emisor/credenciales/{ambiente} - [Generar credenciales de prueba (simulador)](https://docs.openfactura.co/api/operations/emisor_credenciales_prueba.md): POST /emisor/credenciales-prueba - [Probar la conexión con el MH](https://docs.openfactura.co/api/operations/emisor_probar.md): POST /emisor/probar - [Listar establecimientos](https://docs.openfactura.co/api/operations/establecimientos_listar.md): GET /establecimientos - [Crear un establecimiento](https://docs.openfactura.co/api/operations/establecimiento_crear.md): POST /establecimientos - [Actualizar un establecimiento](https://docs.openfactura.co/api/operations/establecimiento_actualizar.md): PUT /establecimientos/{id} - [Crear un punto de venta](https://docs.openfactura.co/api/operations/punto_venta_crear.md): POST /puntos-venta - [Buscar clientes](https://docs.openfactura.co/api/operations/clientes_listar.md): GET /clientes - [Crear un cliente](https://docs.openfactura.co/api/operations/cliente_crear.md): POST /clientes - [Obtener un cliente](https://docs.openfactura.co/api/operations/cliente_obtener.md): GET /clientes/{id} - [Actualizar un cliente](https://docs.openfactura.co/api/operations/cliente_actualizar.md): PUT /clientes/{id} - [Eliminar un cliente](https://docs.openfactura.co/api/operations/cliente_eliminar.md): DELETE /clientes/{id} - [Buscar productos](https://docs.openfactura.co/api/operations/productos_listar.md): GET /productos - [Crear un producto](https://docs.openfactura.co/api/operations/producto_crear.md): POST /productos - [Obtener un producto](https://docs.openfactura.co/api/operations/producto_obtener.md): GET /productos/{id} - [Actualizar un producto](https://docs.openfactura.co/api/operations/producto_actualizar.md): PUT /productos/{id} - [Eliminar un producto](https://docs.openfactura.co/api/operations/producto_eliminar.md): DELETE /productos/{id} - [Listar documentos](https://docs.openfactura.co/api/operations/dte_listar.md): GET /dte - [Emitir un DTE](https://docs.openfactura.co/api/operations/dte_emitir.md): POST /dte - [Validar sin emitir](https://docs.openfactura.co/api/operations/dte_validar.md): POST /dte/validar - [Obtener un documento](https://docs.openfactura.co/api/operations/dte_obtener.md): GET /dte/{codigo} - [Archivo DTE oficial (JSON)](https://docs.openfactura.co/api/operations/dte_json.md): GET /dte/{codigo}/json - [Representación gráfica (PDF)](https://docs.openfactura.co/api/operations/dte_pdf.md): GET /dte/{codigo}/pdf - [Invalidar un documento o un evento](https://docs.openfactura.co/api/operations/dte_invalidar.md): POST /dte/{codigo}/invalidar - [Evento de Retorno (18)](https://docs.openfactura.co/api/operations/dte_retorno.md): POST /dte/{codigo}/retorno - [Transmitir documentos en contingencia](https://docs.openfactura.co/api/operations/contingencia_transmitir.md): POST /contingencia/transmitir - [Evento de Operaciones Especiales (17)](https://docs.openfactura.co/api/operations/operaciones_especiales_informar.md): POST /eventos/operaciones-especiales - [Listar eventos](https://docs.openfactura.co/api/operations/eventos_listar.md): GET /eventos - [Obtener un evento](https://docs.openfactura.co/api/operations/evento_obtener.md): GET /eventos/{codigo} - [Archivo del evento (JSON)](https://docs.openfactura.co/api/operations/evento_json.md): GET /eventos/{codigo}/json - [Representación gráfica del evento (PDF)](https://docs.openfactura.co/api/operations/evento_pdf.md): GET /eventos/{codigo}/pdf - [Listar catálogos del MH](https://docs.openfactura.co/api/operations/catalogos_listar.md): GET /catalogos - [Consultar un catálogo](https://docs.openfactura.co/api/operations/catalogo_buscar.md): GET /catalogos/{id} - [Listar claves de API](https://docs.openfactura.co/api/operations/claves_listar.md): GET /claves - [Crear una clave de API](https://docs.openfactura.co/api/operations/clave_crear.md): POST /claves - [Revocar una clave](https://docs.openfactura.co/api/operations/clave_revocar.md): DELETE /claves/{id} - [Listar webhooks](https://docs.openfactura.co/api/operations/webhooks_listar.md): GET /webhooks - [Crear un webhook](https://docs.openfactura.co/api/operations/webhook_crear.md): POST /webhooks - [Eliminar un webhook y sus entregas](https://docs.openfactura.co/api/operations/webhook_eliminar.md): DELETE /webhooks/{id} - [Cambiar URL, descripción, eventos o activarlo/desactivarlo](https://docs.openfactura.co/api/operations/webhook_actualizar.md): PATCH /webhooks/{id} - [Generar un secreto nuevo](https://docs.openfactura.co/api/operations/webhook_rotar_secreto.md): POST /webhooks/{id}/rotar-secreto - [Enviar un evento `webhook.prueba` ahora](https://docs.openfactura.co/api/operations/webhook_probar.md): POST /webhooks/{id}/probar - [Últimas 50 entregas de un webhook](https://docs.openfactura.co/api/operations/webhook_entregas.md): GET /webhooks/{id}/entregas - [Reenviar una entrega ahora](https://docs.openfactura.co/api/operations/webhook_entrega_reenviar.md): POST /webhooks/entregas/{id}/reenviar - [Bitácora de auditoría](https://docs.openfactura.co/api/operations/auditoria_listar.md): GET /auditoria - [Registros de peticiones de la API](https://docs.openfactura.co/api/operations/registros_listar.md): GET /registros ## Open Factura Cloud - [Facturar desde WhatsApp](https://docs.openfactura.co/cloud/whatsapp.md): Disponible en Open Factura Cloud. Emite y consulta facturas desde WhatsApp.