Ir al contenido

Inicio rápido

En esta guía emite una Factura (01) en el ambiente de pruebas del MH. Nada de lo que haga aquí tiene valor fiscal.

  1. Cree su cuenta y su organización.

    Entre a openfactura.co, regístrese (la contraseña debe tener al menos 10 caracteres) y cree una organización. Usted queda como propietario, con todos los permisos.

  2. Registre el emisor.

    En el panel, abra Emisor → Datos fiscales y complete NIT, NRC, nombre, actividad económica, dirección (departamento, municipio y distrito), teléfono y correo. La primera vez se crean el establecimiento M001 y el punto de venta P001.

  3. Cargue las credenciales de pruebas del MH.

    En Emisor → Credenciales del MH cargue, para el ambiente 00:

    • la contraseña de API que personalizó en el Sitio Emisores DTE,
    • el certificado .crt de pruebas y la contraseña de su llave privada.

    Pulse Probar conexión. Open Factura verifica que la contraseña abra la llave y que el NIT del certificado sea el del emisor. Los secretos se guardan cifrados y la API nunca los devuelve.

  4. Cree una clave de API de pruebas.

    En Desarrolladores → Nueva clave, elija el modo pruebas y los permisos dte:read y dte:emit. Copie la clave of_test_…: se muestra una sola vez.

    Ventana de terminal
    export OPENFACTURA_API_KEY=of_test_...
  5. Valide y emita su primera factura.

    En una Factura, precioUni incluye IVA. Open Factura calcula el IVA, los redondeos y el total.

    Primero valide: no consume número de control, no firma y no transmite.

    Ventana de terminal
    curl https://openfactura.co/api/v1/dte/validar \
    -H "Authorization: Bearer $OPENFACTURA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
    "tipoDte": "01",
    "datos": { "items": [{ "descripcion": "Servicio", "cantidad": 2, "precioUni": 11.3 }] }
    }'

    Si problemas viene vacío, emita con una Idempotency-Key propia:

    Ventana de terminal
    curl https://openfactura.co/api/v1/dte \
    -H "Authorization: Bearer $OPENFACTURA_API_KEY" \
    -H "Content-Type: application/json" \
    -H "Idempotency-Key: primera-factura-001" \
    -d '{
    "tipoDte": "01",
    "datos": { "items": [{ "descripcion": "Servicio", "cantidad": 2, "precioUni": 11.3 }] }
    }'

201 Created con el Documento procesado por el MH:

{
"id": "…",
"codigoGeneracion": "0862382B-0BB8-42A0-BB6B-B42DCCDF1EA4",
"numeroControl": "DTE-01-M001P001-000000000000001",
"tipoDte": "01",
"ambiente": "00",
"estado": "procesado",
"fechaEmision": "2026-11-12",
"horaEmision": "01:38:12",
"receptorNombre": null,
"receptorDocumento": null,
"total": 22.6,
"selloRecibido": "20265EE94C1B2C4CBB56F56121E37F5AC8CA7D27",
"origen": "api",
"error": null,
"creado": 1794469092559,
"urlConsulta": "https://admin.factura.gob.sv/…"
}

Si el MH no responde, recibe 202 Accepted con estado contingencia: el documento ya está firmado y es válido; se transmite después (vea Contingencia).

Al receptor se le entregan el JSON oficial y su representación gráfica (PDF):

Ventana de terminal
curl -o factura.json https://openfactura.co/api/v1/dte/0862382B-0BB8-42A0-BB6B-B42DCCDF1EA4/json \
-H "Authorization: Bearer $OPENFACTURA_API_KEY"
curl -o factura.pdf https://openfactura.co/api/v1/dte/0862382B-0BB8-42A0-BB6B-B42DCCDF1EA4/pdf \
-H "Authorization: Bearer $OPENFACTURA_API_KEY"